put/get/list命令上的PHP超时

put/get/list命令上的PHP超时,php,ftp,passive-mode,Php,Ftp,Passive Mode,我整天都在处理这个问题。我有一个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); i

我整天都在处理这个问题。我有一个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);
在不切换到被动模式的情况下,相同的输出没有警告。也不会回显任何文件(“文件”下方)。任何命令,如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

这似乎是php中ftp实现中的一个bug。但是我不知道如何应用这里列出的补丁


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

好了,我用curl和PHP编写了下载/上传和列表的函数。AFAIK使用内置ftp实现时,这是一个PHP错误。卷曲稍微慢一点,但它适合我的需要

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