Как использовать PHP CLI для автоматизации FTP, когда у меня нет доступа к собственному дескриптору FTP в PHP? - PullRequest
0 голосов
/ 20 мая 2009

Я пишу сценарий автоматизации на рабочем сервере, который, помимо прочего, должен получить список удаленных файлов через FTP (FTP является единственным вариантом для взаимодействия с удаленной файловой системой) и выборочно загрузить их.

Почему я не могу использовать встроенные в PHP оболочки FTP

Это рабочий сервер в очень хрупкой среде. Я пишу это с помощью PHP CLI, так как большинство существующих сценариев автоматизации написаны именно так. Однако, хотя у меня очень новая установка PHP 5.1.2, я не могу перекомпилировать ее с --with-ftp, и эта опция не включена.

Остальные опции

Итак, я могу подключиться, получить список файлов и выборочно загрузить их с помощью функций shell_exec () или php_filesystem с использованием потока FTP и функций собственной файловой системы PHP.

К сожалению, я не могу найти хороших примеров кода ни того, ни другого. Когда я пытаюсь выполнить shell_exec с помощью команд FTP, программа зависает, предположительно, потому что управление остается на оболочке, когда я открываю приглашение FTP.

$ftp_connect_command = "ftp -v -n $bl_ftp_host";
$ftp_login_command = "user $bl_ftp_user $bl_ftp_password";
$ftp_bye_command = "bye";

$ftp_connect_response = shell_exec("$ftp_connect_command");
// this never executes, because it hangs here waiting for a return to shell
$ftp_login_response = shell_exec($ftp_login_command);

Или, я думаю, что потоковый способ сделать это будет:

$ftp_path = "ftp://$bl_ftp_user:$bl_ftp_user@$bl_ftp_host/";
$stream_options = array('ftp' => array('overwrite' => false));
$context = stream_context_create();
if ($dh = opendir($ftp_path, $context))
{
    while (filename = readdir($dh))
    {
        print($filename);
    }
}

Но я не уверен, считается ли это надежным методом.

Может ли кто-нибудь предоставить примеры кода, показывающие, как получить список каталогов и загрузить файлы любым из этих методов?

Ответы [ 2 ]

2 голосов
/ 20 мая 2009

Очевидно, что WordPress использует pemftp для FTP с чистым PHP (в системах, скомпилированных без поддержки FTP)

0 голосов
/ 20 мая 2009

Вы смотрели на нативную PHP FTP-библиотеку? http://us2.php.net/ftp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...