PHP-прогерам: можете затестить у себя рекурсивное копирование на фтп? Оч надо.

LA
На сайте с 03.06.2008
Offline
105
933

Пожалуйста, протестируйте рекурсивное копирование файлов и папок на фтп. Сам сейчас не могу :(



// $myftp - Идентификатор соединения с FTP сервером.

// запуск:

define('THIS_DIR', dirname(__FILE__) . '/');
$pwd = ftp_pwd($myftp);
recursive_ftp_copy(THIS_DIR . "copy", $pwd);

function recursive_ftp_copy ($from, $to) {
global $myftp;
if (substr($from, -1) != '/') $from .= '/';
// if (substr($to, -1) != '/') $to .= '/';
if (is_dir($from) === FALSE) return;
$pwd = ftp_pwd($myftp);
if (($to != $pwd) AND (ftp_is_dir($to) === FALSE)) { ftp_mkdir($myftp, $to); ftp_chmod($myftp, 0777, $to); }


if (($op = opendir($from)) !== FALSE) {
while (($file = readdir($op)) !== FALSE) {
if (($file != '.') AND ($file != '..')) {
if (is_dir($from . $file)) {
ftp_chdir($myftp, $file);
recursive_ftp_copy($from . $file, $file);
ftp_chdir($myftp, $pwd);
} else {
my_ftp_put($myftp, $file, $from . $file);
ftp_chmod($myftp, 0777, $file);
}
}
}

closedir($op);
}
return;
}

function ftp_is_dir ($dir) {
global $myftp;

$original_directory = ftp_pwd($myftp);

if (@ftp_chdir($myftp, $dir)) {
ftp_chdir($myftp, $original_directory);
return true;
} else {
return false;
}
}


if (!function_exists('ftp_chmod')) {
function ftp_chmod($ftp_stream, $mode, $filename) {
return ftp_site($ftp_stream, 'CHMOD ' . $mode . ' ' . $filename); /*sprintf('CHMOD %u %s', $mode, $filename));*/
}
}

function my_ftp_put($myftp, $file, $from) {
$type = FTP_ASCII;
$ftype = strtolower(end(explode('.', $from)));

if (($ftype == 'jpg') OR ($ftype == 'jpeg') OR ($ftype == 'gif') OR ($ftype == 'png') OR ($ftype == 'bmp') OR ($ftype == 'ico')) {
$type = FTP_BINARY;
}

return ftp_put($myftp, $file, $from, $type);
}

Буду благодарен, если поможите оттестить и(ли) указать на ошибки.

P
На сайте с 08.03.2007
Offline
250
#1

потенциальный дыродел:

ftp_chmod($myftp, 0777, $to);

потенциальный уничтожатель информаци:

$type = FTP_ASCII;
...
if (($ftype == 'jpg') OR ($ftype == 'jpeg') OR ($ftype == 'gif') OR ($ftype == 'png') OR ($ftype == 'bmp') OR ($ftype == 'ico')) {
$type = FTP_BINARY;
}

Символьные ссылки могут привести к зацикливанию или дублированию, они тоже не обрабатываются. Ну и восстановление после обрывов соединения не предусмотрены.

Вопрос - есть же софт, недавно обсуждался. Зачем самому писать?

LA
На сайте с 03.06.2008
Offline
105
#2
Pilat:
потенциальный дыродел:

Согласен, но там, в основном, будет загрузка картинок и прочих не скриптинговых файлов.

Pilat:
потенциальный уничтожатель информаци:

Почему? Объясните, пожалуйста.

Pilat:
Вопрос - есть же софт, недавно обсуждался. Зачем самому писать?

Нужно небольшое решение для одного скрипта. Там софт не нужен :)

Большое спасибо, Pilat.

P
На сайте с 08.03.2007
Offline
250
#3

Уничтожитель - потому что ascii тип конверсии стоит по умолчанию, то есть как только бинарный файл - не картинка - будет передан, он пропадёт. Особой необходимости делать конверсию сейчас нет, так что такое поведение принесёт больше вреда, чем пользы.

LA
На сайте с 03.06.2008
Offline
105
#4

Pilat, хорошо, спасибо.

Появилась возможность - оттестил сам. Код не до конца рабочий.

тему можно закрыть.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий