Тайм-аут PHP для команд put/get/list
Я занимался этой проблемой весь день. Пару часов назад я написал этот вопрос. У меня есть PHP-скрипт, который работает нормально на моем ПК для разработки, но на реальном сервере не совсем хорош.
Сценарий:
$conn_id = ftp_ssl_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
//$DB = @mysqli_connect($hostname_DB,$username_DB,$password_DB,$database_DB);
if ($login_result == null)
die("Cannot connect");
echo "Connected<br />Changing to passive mode <br />";
if (ftp_pasv($conn_id, true))
{
echo "Passive mode: ON<br /><br />";
}
else
{
echo "Passive mode: OFF<br /><br />";
}
echo "Current dir: " . ftp_pwd($conn_id) . "\n";
if (ftp_chdir($conn_id, "ABC")) {
echo "Current dir is now: " . ftp_pwd($conn_id) . "\n";
} else {
echo "Dir was not changed\n";
}
$files = array();
$files = ftp_rawlist($conn_id, '.');
echo "<br />Files<br />";
print_r($files);
ftp_close($conn_id);
На этой линии: $files = ftp_rawlist($conn_id, '.'); (line 65)
скрипт останавливается примерно на минуте и выдает эту ошибку:
Connected
Changing to passive mode
Passive mode: ON
Current dir: / Current dir is now: /ABC
Warning: ftp_rawlist(): php_connect_nonb() failed: Operation now in progress (115) in /var/www/html/ftpscript.php on line 65
Files
Без перехода в пассивный режим это тот же выход без предупреждения. Также не отображаются файлы (ниже "Файлы"). То же самое происходит с любой командой, такой как nlist, mput, mget и т. Д.
Я читал эту статью, но не знал, применяется ли она до сих пор. Другие сайты говорят, что это конфигурация моего брандмауэра, но я не понимаю, что делать. Мой сервер работает:
PHP 5.4.16 (cli) (built: Oct 31 2014 12:59:36)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
Я открыл порты 20, 21 и диапазон от 5000 до 5100. Со всем этим я не знаю, если это проблема моего конца, но PHP. Если я использую lftp (клиент Cli FTP), он работает нормально.
РЕДАКТИРОВАТЬ #1
Кажется, это ошибка в реализации ftp в php. Однако я не знаю, как применить исправление, перечисленное здесь https://bugs.php.net/patch-display.php?bug_id=55651&patch=ftp_usepasvaddress.patch&revision=latest
Пожалуйста, любая помощь будет оценена. Спасибо!
1 ответ
Ну, я закончил писать функцию для загрузки / выгрузки и распечатки, используя curl с PHP. AFAIK Это ошибка PHP при использовании встроенной реализации ftp. Завиток немного медленнее, но он подходит для моих нужд.