PHP загружает всю папку (рекурсивно) через FTP
В настоящее время у меня очень большой сайт размером примерно 5 Гб с 60 000 файлами. Текущий хост не очень помогает мне перенести сайт на новый хост, и я думал о том, чтобы сделать простой скрипт на моем новом хосте для FTP на старый хост и загрузить всю папку public_html (рекурсивно) на новый сервер. Возможно ли это, и если да, то есть ли у кого-нибудь какие-либо ссылки, которыми они могли бы поделиться, чтобы помочь в этом? Очень признателен.
3 answers
Вероятно, существуют лучшие механизмы для того, чтобы делать то, что вы хотите.
Во-первых, можете ли вы использовать sftp
или scp
с одного хоста на другой?
scp -R username@oldhost:path/to/directory/ /path/to/destination/directory
Или
sftp username@oldhost # then use 'get -r' to download recursively
Или
rsync -avz -P username@oldhost:/path/to/directory/ /path/to/destination/directory/
-P
позволяет легко перезапустить остановленную/мертвую загрузку.
Если хорошие инструменты не будут работать, посмотрите, установлен ли wget
:
wget --mirror --continue --ftp-user=username ftp://oldhost/path/to/directory/
--continue
упрощает перезапуск остановленной/мертвой загрузки.
Если файлов много, я настоятельно рекомендую вам сделать.tar.gz архив. Я не знаю, какие у вас есть ограничения на php, но вы можете попробовать это в php:
$archive = "backup.tar.gz";
$directory = "./www";
exec( "tar -czf $archive $directory");
Затем вы можете просто загрузить 1 отдельный архив gziped через http/ftp или любым другим способом.
Да, вы можете сделать это на чистом PHP!
Я только что выпустил 2 новые библиотеки для выполнения таких задач в FTP / SFTP
Рекурсивное копирование файлов и папок на удаленном SFTP-сервере (если local_path заканчивается косой чертой, загружайте содержимое папки, в противном случае загружайте саму папку)
Ftp::upload_dir($server, $user, $password, $local_path, $remote_path, $port = 22);
Загрузите каталог с удаленного FTP-сервера (если remote_dir заканчивается косой чертой, загрузите содержимое папки, в противном случае загрузите саму папку)
Ftp::download_dir($server, $user, $password, $remote_dir, $local_dir,
$порт = 22);
Если вы хотите взглянуть на код, вы увидите рекурсивные функции, которые творят волшебство;)