PHP – ftp_put + Скопировать всю структуру папок

Я пытаюсь создать FTP-скрипт, который скопирует локальную структуру папок до точки FTP. В основном обновить веб-сайт.

Я тестировал следующий код (изменил имя пользователя / пароль / домен), но соединение не работает и работает.

$server = 'ftp.domainname.co'; $ftp_user_name = 'user'; $ftp_user_pass = 'pass'; $dest = '.'; $source = '.'; $mode = 'FTP_ASCII'; $connection = ftp_connect($server); $login = ftp_login($connection, $ftp_user_name, $ftp_user_pass); if (!$connection || !$login) { die('Connection attempt failed!'); } $upload = ftp_put($connection, $dest, $source, $mode); if (!$upload) { echo 'FTP upload failed!'; } ftp_close($connection); 

Я уверен, что точка, которая ломается, – это строка ftp_put. Мои вопросы:

  1. Может ли ftp_put загружать всю структуру каталогов с файлами и т. Д. Или это просто для загрузки одного файла за раз? Есть ли другая команда, которую я должен использовать?

  2. Я думаю, что у меня что-то не так с этими переменными:

      $dest = '.'; $source = '.'; $mode = 'FTP_ASCII'; 

Я считаю, что режим правильный.

$ dest – это только корень ftp-сервера, ftp.domainname.co. Должен ли я помещать имя ftp-сервера или что здесь происходит.

$ source – это текущий локальный путь. Я также попробовал полный путь C: \ etc.

Я получаю эту ошибку: Предупреждение: ftp_put () ожидает, что параметр 4 будет длинным

любая помощь была бы большой.

спасибо

Он не работает, потому что он ожидает файл, а не каталог. В руководстве PHP для ftp_put есть несколько примеров кода для рекурсивных загрузок файлов, размещенных комментаторами.

Вот один из них (обратите внимание, что для этого требуется полный путь):

 function ftp_putAll($conn_id, $src_dir, $dst_dir) { $d = dir($src_dir); while($file = $d->read()) { // do this for each file in the directory if ($file != "." && $file != "..") { // to prevent an infinite loop if (is_dir($src_dir."/".$file)) { // do the following if it is a directory if (!@ftp_chdir($conn_id, $dst_dir."/".$file)) { ftp_mkdir($conn_id, $dst_dir."/".$file); // create directories that do not yet exist } ftp_putAll($conn_id, $src_dir."/".$file, $dst_dir."/".$file); // recursive part } else { $upload = ftp_put($conn_id, $dst_dir."/".$file, $src_dir."/".$file, FTP_BINARY); // put the files } } } $d->close(); } 
 Warning: ftp_put() expects parameter 4 to be long 

Ну, для меня это кажется совершенно очевидным: параметр 4 должен быть «длинным» (или: числом). В этом случае это также может быть CONSTANT который представляет это число, например ftp_put(x, y, z, FTP_ASCII) . Не с кавычками ('), как вы это делали: ftp_put(x, y, z, 'FTP_ASCII')