Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
 Аватар для andyarus
175 / 77 / 2
Регистрация: 19.04.2011
Сообщений: 322

удаление файлов ftp curl php

15.07.2011, 14:38. Показов 4612. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
$content = CURL_FTP($url, 0, 0);
$arr = explode("\r\n", $content);
foreach($arr as $v) $v !== '' ? $ftpfiles[] = $v : '';
foreach($ftpfiles as $v) $deletearray[] = 'DELE '.$v;
CURL_FTP($url, 0, 1);
 
function CURL_FTP($url, $upload=0, $delete=0){
    global $useragent, $infile, $filetoupload, $deletearray;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FTPLISTONLY, 1);
    if($upload == 1){
        curl_setopt($ch, CURLOPT_UPLOAD, 1);
        curl_setopt($ch, CURLOPT_INFILE, $infile);
        curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filetoupload));
    }
    
    $delete == 1 ? curl_setopt($ch, CURLOPT_QUOTE, $deletearray) : '';
    
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    $content = curl_exec($ch);
    
    if(curl_errno($ch)){
        echo 'Curl error: ' . curl_error($ch);
    }
    
    curl_close($ch);
    
    return $content;
}
цель - удалить все.
достигается, если нет папок.
если есть, вылазит ошибка.

пробовал отделять папки, но не работает на ftp!
PHP
1
foreach($ftpfiles as $v) !is_dir($v) ? $deletearray[] = 'DELE '.$v : '';
1 вопрос - как на фтп отделить папки и файлы
2 вопрос - с помощью какой команды удаляются папки. файлы удаляются (DELE имя файла)
3 если нет команды для папок, как удалить все с ftp?

Добавлено через 9 минут
PHP
1
2
$url = 'ftp://login:pass@ftp.host.ru';
foreach($ftpfiles as $v) !is_dir($url.'/'.$v) ? $deletearray[] = 'DELE '.$v : $dir[] = $v;
так работает, но долго! по-другому реалиуземо?

Добавлено через 5 минут
PHP
1
foreach($ftpfiles as $v) preg_match("#\.#", $v) ? $deletearray[] = 'DELE '.$v : $dir[] = $v;
так лучше, но если в имени папки будет точка, вылезет ошибка(
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2011, 14:38
Ответы с готовыми решениями:

Авторизация и парсинг PHP (CURL)
Доброе время суток форумчане, Столкнулся с нуждою спарсить контент контент из закрытой части сайта https://lk.cinemapark.ru/ мне...

Google api and curl php
Приветствую, дамы и господа! Есть проблема. Никогда не работал с Google API, а сегодня понадобилось поковыряться в Google Adwords API. Так...

PHP CURL и VK
Раньше скрипт работал: залогинивался на ВК, сохранял куки в файл и использовал их при последующих обращениях, но теперь почему-то куки l и...

10
bigMatherHacker
 Аватар для Hurtsok
112 / 81 / 12
Регистрация: 18.08.2010
Сообщений: 237
16.07.2011, 09:05
А как ты собираешься удалять папки если в них есть файлы? Ведь необходимо сначала очистить папку от файлов и затем ее удалить. Тут без рекурсии никак.
0
 Аватар для andyarus
175 / 77 / 2
Регистрация: 19.04.2011
Сообщений: 322
16.07.2011, 10:11  [ТС]
уже понял. без рекурсии получилось сделать - удаляю файлы в папке, потом саму папку. с рекурсией пока хз как. до этого не приходилось писать рекурсивные функции. как я понял рекурсия - когда в теле функции вызываешь эту же функцию...
0
bigMatherHacker
 Аватар для Hurtsok
112 / 81 / 12
Регистрация: 18.08.2010
Сообщений: 237
16.07.2011, 19:05
Да все верно. Но то что вы удалили это был первый уровень, его можно и без рекурсии, а если там вложена папка, а в ней еще и еще, то тут без нее никак, так мы не знаем сколько там таких папок. С помощью цикла такое не реализовать. Рекурсия это очень просто, главное понять как работают прерывания на низком уровне, и всегда иметь выход из рекурсии иначе забьете всю память вызовами.
0
163 / 163 / 9
Регистрация: 08.01.2011
Сообщений: 850
16.07.2011, 23:30
А может сначала построить дерево файлов?
PHP
1
2
3
4
5
6
7
1) 2)
    3) 4)
        5)
        6)
    7)
8)
9) 10)
И сначала удалять те, в которых максимальный id_parent (родитель), а потом (в самом конце) все файлы с id_parent == 0.

Как вариант.

И еще... is_file

P.S. мб я не понял задание.
0
bigMatherHacker
 Аватар для Hurtsok
112 / 81 / 12
Регистрация: 18.08.2010
Сообщений: 237
17.07.2011, 07:45
Эм.... А какой смысл от построения дерева?? Если человек знает что хочет удалить. Обычно просто так рекурсивно не удаляют. И я не понимаю что вы хотите сделать с помощью идентификаторов и зачем вообще они?
0
163 / 163 / 9
Регистрация: 08.01.2011
Сообщений: 850
17.07.2011, 09:58
Дерево файлов - что бы рекурсия была поменьше. Рекурсивно будет только составление дерева.
Все остальные процедуры будут без рекурсии уже.
0
bigMatherHacker
 Аватар для Hurtsok
112 / 81 / 12
Регистрация: 18.08.2010
Сообщений: 237
17.07.2011, 11:25
Сами посудите, вы рекурсивно составляете дерево, а затем дополнительно еще с ним и работаете. Не лучше ли снизить нагрузку и за несколько шагов рекурсии сделать то, что вы хотите сделать после составления дерева, зачем 10 раз обрабатывать одно и тоже.
0
 Аватар для andyarus
175 / 77 / 2
Регистрация: 19.04.2011
Сообщений: 322
17.07.2011, 22:17  [ТС]
рекурсия жопа! я ********, но все-таки получилось накатать рабочий вариант. и он в 4 раза медленнее FileZilla удаляет. почему?

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
 
set_time_limit(0);
ob_implicit_flush(1);
ob_end_flush();
$mtbegin = microtime(1);
 
$useragents = str_replace("\r\n", '', file('useragents.txt'));
 
//формат
//ftp://login1:password@ftp.host.ru
//ftp://login2:password@ftp.host.ru
//ftp://login3:password@ftp.host.ru
 
$count = file('loginsftp.txt');
for($i=0;$i<count($count);$i++){
 
$useragent = $useragents[mt_rand(0, count($useragents)-1)];
 
$logins = str_replace("\r\n", '', file('loginsftp.txt'));
$url = array_shift($logins);
file_put_contents('loginsftp.txt', implode("\r\n", $logins));
 
$result = CURL_FTP($url, 0, 0);
$content = $result['content'];
$arr = explode("\r\n", $content);
$ftp = '';
foreach($arr as $v) $v !== '' ? $ftp[] = $v : '';
if($ftp == ''){
    echo $i+1 .' '.$url.' <b style="color:green;">пусто!</b><br />';
    continue;
} else {
    $files = ''; $dirs = '';
    foreach($ftp as $v) preg_match("#\.#", $v) ? $files[] = 'DELE '.$v : $dirs[] = $v;
    if($files !== '') $result = CURL_FTP($url, $files, 0, 1);
    if($result['errno'] == 21) $files = ''; $dirs = ''; foreach($ftp as $v) !is_dir($url.'/'.$v) ? $files[] = 'DELE '.$v : $dirs[] = $v;
    if($dirs !== ''){
        for($a=0;$a<count($dirs);$a++){
            $urldir = $url.'/'.$dirs[$a].'/';
            $result = remove_ftp($urldir);
            if($result == true) continue;
        }
    }
  }
 
$result = CURL_FTP($url, 0, 0);
if(strlen($result['content']) == 0){
    echo $i+1 .' '.$url.' <b style="color:maroon;">файлы удалены!</b><br />';
} else {
    echo $i+1 .' '.$url.' <b style="color:red;">huinya какая-то! (<i>не все файлы удалились. возможно проблема с CURLOPT_TRANSFERTEXT или правами на файлы</i>)</b><br />';
}
 
continue;
 
}
 
 
 
if((round((round(microtime(1)-$mtbegin, 2))/60)) > 1){
echo '<br />Всего времени затрачено: '; echo '~'.round((round(microtime(1)-$mtbegin, 2))/60) .' мин<br /><br />';
} else {
echo '<br />Всего времени затрачено: '; echo '~'.round(microtime(1)-$mtbegin, 2) .' сек<br /><br />';
}
 
 
 
function remove_ftp($url){
    $result = CURL_FTP($url, 0, 0);
    $content = $result['content'];
    $arr = explode("\r\n", $content);
    $ftp = '';
    foreach($arr as $v) $v !== '' ? $ftp[] = $v : '';
    $dir = preg_replace("#ftp://.+/#U", "", $url);
    $urldir = preg_replace("#/[^@:/]+/$#U", "/", $url);
    if($ftp == ''){
        $dir = array("RMD $dir");
        CURL_FTP($urldir, $dir, 0, 1);
        return true;
    }
    
    $files = ''; $dirs = '';
    foreach($ftp as $v) preg_match("#\.#", $v) ? $files[] = 'DELE '.$dir.$v : $dirs[] = $v;
    if($files !== '') $result = CURL_FTP($urldir, $files, 0, 1);
    if($result['errno'] == 21) $files = ''; $dirs = ''; foreach($ftp as $v) !is_dir($url.'/'.$v) ? $files[] = 'DELE '.$v : $dirs[] = $v;
    if($dirs !== ''){
        for($b=0;$b<count($dirs);$b++){
            $urldir = $url.$dirs[$b].'/';
            $result = remove_ftp($urldir);
            if($result == true) continue;
        }
    }
    remove_ftp($url);
}
 
 
 
function CURL_FTP($url, $deletearray, $upload=0, $delete=0){
    global $useragent, $infile, $filetoupload;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FTPLISTONLY, 1);
    //curl_setopt($ch, CURLOPT_TRANSFERTEXT, 1); // если нет бинарных файлов (картинки, фавиконы и тп), вроде как работает быстрее
    if($upload == 1){
        curl_setopt($ch, CURLOPT_UPLOAD, 1);
        curl_setopt($ch, CURLOPT_INFILE, $infile);
        curl_setopt($ch, CURLOPT_INFILESIZE, filesize($filetoupload));
    }
    
    $delete == 1 ? curl_setopt($ch, CURLOPT_QUOTE, $deletearray) : '';
    
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    $content['content'] = curl_exec($ch);
    
    $content['errno'] = curl_errno($ch);
    //if(curl_errno($ch) !== 21){
    //    echo 'Curl errornumber: ' . curl_errno($ch) . '<br />';
    //    echo 'Curl error: ' . curl_error($ch);
    //}
    curl_close($ch);
    
    return $content;
}
 
 
 
?>
0
bigMatherHacker
 Аватар для Hurtsok
112 / 81 / 12
Регистрация: 18.08.2010
Сообщений: 237
18.07.2011, 04:00
Оптимизируйте вашу логику.
0
 Аватар для andyarus
175 / 77 / 2
Регистрация: 19.04.2011
Сообщений: 322
18.07.2011, 06:14  [ТС]
хелп?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2011, 06:14
Помогаю со студенческими работами здесь

Curl из php
Проблема такова что с консоли pdf генерируется при curl запросе а из php не получается достигнуть этого curl -X POST -vv -F...

PHP cURL данные
Есть скрипт с использование cURL метод POST. Мне нужно сохранить полученный ответ в файл для дальнейшего получения данных из страницы....

curl php javascript
Как с помощью curl вывести страницу на которой есть javascript ? Подскажите кто знает пожалуйста. А то страница не отображается корректно...

Php curl timeout
Здравствуйте, подскажите пожалуйста, если сервер долго не отвечает, то вылезает ошибка: Maximum execution time of 15 seconds exceeded ...

Php curl parsing
Необходимо со страницы https://realty.yandex.ru/offer/2174956 получить номер телефона... при нажатии на кнопку отправляется POST запрос ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru