put / get / list命令的PHP超时

时间:2015-07-01 03:01:52

标签: php ftp passive-mode

我整天都在处理这个问题。 A couple hours ago I wrote this Question。我有一个PHP脚本在我的开发PC中运行正常但在真实服务器上并不是很好。

脚本是:

$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等都会发生同样的事情。

我看了this article,但不知道它是否仍适用。其他网站说我的防火墙配置,但我不明白该怎么做。我的服务器正在运行:

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

这似乎是php中ftp实现的一个错误。但是我不知道如何应用此处列出的补丁https://bugs.php.net/patch-display.php?bug_id=55651&patch=ftp_usepasvaddress.patch&revision=latest

请,任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,我结束了使用curl使用PHP编写下载/上传和列表的功能。 AFAIK使用内置的ftp实现时,这是一个PHP错误。卷曲有点慢,但它可以满足我的需求。