Загрузка папок по FTP рекурсивно

Задача как задача. Не каждый день надобится, но, если подумать, то как ещё можно загружать целые папки по FTP и не думать о вложенных папках?

Подошел к решению вдумчиво: погуглил. Первое, что попалось на глаза - библиотеки PEAR Потренировался с полчасика… научился и ставить и использовать. Общее впечатление от библиотеки: слегка устарела и тяжеловата. Например, целые пласты кода заменяет шаблонизатор Smarty, а часть задач просто не требуют такой степени совместимости. Ну и библиотека Net_FTP не заработала как я ожидал, а разбираться детально времени пожалел.

Второе решение в гугле(им я и воспользовался) предложил Зверобой. Его я привожу полностью:

$ftp_server = ‘ftp.freehost.com’;
$ftp_login = ‘login’;
$ftp_password = ‘password’;
$local_dir = ‘upload’;
$ftp_root = ‘/public_html/’;

function do_upload($dir = ‘upload’)
{
global $conn_id, $ftp_root, $transfer_mode, $local_dir;
$ftp_dir = preg_replace(’/^’.$local_dir.’\/?/’, ”, $dir);
if ($ftp_dir != ”)
echo ‘Папка ‘. $ftp_dir . ((ftp_mkdir($conn_id, $ftp_root . $ftp_dir)) ? ‘ создана’ : ‘ не создана’).’
‘;
$filelist = glob(($dir!=”) ? $dir.’/*’ : ‘*’);
if ($filelist == array())
return 0;
foreach ($filelist as $file)
{
if (is_file($file))
{
$transfer_mode = (preg_match(’/\.(gif|jpg|png)$/’, $file)) ? FTP_BINARY : FTP_ASCII;
echo ‘Файл ‘ . $file . ((ftp_put($conn_id, $ftp_root . preg_replace(’/^’.$local_dir.’\//’, ”, $file), $file, $transfer_mode)) ? ‘ загружен’ : ‘ не загружен’).’
‘;
}
else
do_upload($file);
}
return 0;
}

$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_login, $ftp_password);
if (!$conn_id || !$login_result)
exit(”Не удалось установить соединение с FTP сервером!\nПопытка подключения к серверу $ftp_server!”);
else
echo “Установлено соединение с FTP сервером $ftp_server
“;
do_upload($local_dir);
ftp_close($conn_id);
?>

Код простой и понятный без комментариев. Есть в нём и недочеты, конечно… например: если папка на сервере уже есть, то он всё равно пытается её создать(на работоспосовность, кстати, не влияет). Проверил на своем проекте по XSS - работает.

img_4210.JPG

Если вам понравился пост, вы можете оставить комментарий или подписаться на RSS и получать каждый новый пост из этого блога.

Комментарии

Еще никто не комментировал.

Оставьте комментарий

(обязательно)

(обязательно)