Heroku中的php ftp_nlist超时

时间:2015-05-19 07:46:36

标签: php heroku ftp timeout

什么

我正在尝试在 Heroku 中进行非常基本的 ftp 阅读。

代码:

$ftp = ftp_connect($config['domain']);

$login = ftp_login($ftp,$config['ftp_user'],$config['ftp_pass']);

ftp_pasv($ftp, true);

$contents = ftp_nlist($ftp, "/");
for ($i = 0 ; $i < count($contents) ; $i++)
        echo "<li>" . substr($contents[$i],1) . "</li>";

ftp_close($ftp); 

Heroku错误

2015-05-19T07:26:01.678102+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=GET path="/" host=xxx-ftp.herokuapp.com request_id=xxxxx-364a-48f8-8e2a-383affb0789f fwd="xx.12.8.106" dyno=web.1 connect=0ms service=30000ms status=503 bytes=0
2015-05-19T07:26:31.739770+00:00 app[web.1]: [Tue May 19 07:26:31.738789 2015] [proxy_fcgi:error] [pid 186:tid 140199224919808] (70007)The timeout specified has expired: [client 10.127.183.84:42907] AH01075: Error dispatching request to : (polling)
2015-05-19T07:26:31.853475+00:00 app[web.1]: [19-May-2015 07:26:31 UTC] PHP Warning:  ftp_nlist(): php_connect_nonb() failed: Operation now in progress (115) in /app/list.php on line 26

事实

  1. 连接正常(返回true)
  2. 只有在执行ftp_nlist或ftp_rawlist时,Heroku才会发出超时。
  3. 登录正常
  4. 我尝试过使用PASIVE模式
  5. PWD的其他基本命令正常运行
  6. 我还试过列出一个更具体的文件夹,例如:ftp_nlist($conn,"/MyFolder");
  7. 我正在尝试阅读和列出的文件夹数量很少。
  8. FTP服务器在距离其他FTP客户端不到2秒的时间内响应
  9. 其他服务器(非heroku)中的相同代码正常工作。

1 个答案:

答案 0 :(得分:0)

这似乎适用于ftp.mozilla.org例如:

$ftp = ftp_connect('ftp.mozilla.org');
$login_result = ftp_login($ftp, 'anonymous', '');
ftp_pasv($ftp, true);
var_dump(ftp_nlist($ftp, "/pub/mozilla.org/"));

您是否可能在目标FTP后面使用https://bugs.php.net/bug.php?id=55651进入NAT?