<? Блог php-программиста ?>

www.liex.ru - ?????????????? ?????????? ?????? ? ??????? ????????
  • Чтение блога

Удаление не пустого каталога по FTP

Недавно столкнулся с ситуацией когда необходимо удалить не пустой каталог по протоколу FTP с помощью PHP, решения в сети не нашел, поэтому сделал сам:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
$ftp_server        = "127.0.0.1"; // IP-адрес FTP-сервера
$ftp_user_name     = "admin"; // Пользователь
$ftp_user_pass     = "admin"; // Пароль
 
$conn_id = ftp_connect($ftp_server) or die("Не удалось установить соединение с $ftp_server<br>"); 
 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 
 
if ((!$conn_id) || (!$login_result)) 
{ 
    echo "<font color=\"red\">Не удалось установить соединение</font> с FTP сервером!<br>";
    echo "Попытка подключения к серверу $ftp_server под именем $ftp_user_name!<br>";
    exit; 
} 
else 
{
    echo "<font color=\"green\">Установлено соединение</font> с FTP сервером $ftp_server под именем $ftp_user_name<br>";
}
 
$start_root = ""; // Здесь укажите директорию для удаления, относительно корневого каталога FTP
 
function full_list($dir, $conn_id)
{
    $result = "";
    if((sizeof(explode("/..", $dir))<=1)||(sizeof(explode("/.", $dir))<=1))
    {
        if (@ftp_delete($conn_id, $dir)) 
        {
            echo "Файл $c <font color=\"red\">удален</font>\n<br>";
        } 
        else
        {
            if (@ftp_rmdir($conn_id,  $dir)) 
            {
                echo "Директория $c <font color=\"red\">удалена</font>\n<br>";
            } 
            else 
            {
                echo "<font color=\"green\">Scaning</font> $dir <br>";
                $contents = ftp_nlist($conn_id, $dir);
                if($contents!="")
                foreach ($contents as $c)
                {
                    if($c!=$dir)
                    {
                        if (@ftp_delete($conn_id, $c)) 
                        {
                            echo "Файл $c <font color=\"red\">удален</font>\n<br>";
                        } 
                        else
                        {
                            if (@ftp_rmdir($conn_id,  $c)) 
                            {
                                echo "Директория $c <font color=\"red\">удалена</font>\n<br>";
                            } 
                            else 
                            {
                                $result = full_list($c, $conn_id);
                            }
                        }
                    }
                }
            }
        } 
    }   
 
    return $result;
}
 
echo full_list($start_root, $conn_id);

Понадобилась рекурсия, скрипт немного громоздкий, но работает. Если у вас есть более компактный вариант, то пришлите мне на почту(w3db@yandex.ru) или напишите об этом в комментариях.

Похожие записи:

Метки: «» , «» , «» , «»

Опубликовано 22 апреля 2009 года в категории «Кодим на PHP вместе»

Комментарии (1)

  1. Разработчик XHTML
    апреля 25, 2009 6:00 пп

    Спасибо!