“php_connect_nonb() 失败:操作正在进行 (115)”间歇性地发生

2022-08-30 23:13:13

我们通过FTP将一些文件发送给具有PHP cron作业的第三方。

但是,有时我们会收到以下错误:

ErrorException [ 2 ]: ftp_put(): php_connect_nonb() failed: Operation 
now in progress (115) ~ MODPATH/fileop/classes/Drivers/Fileop/Ftp.php [ 37 ]

当我说“有时”时,我的意思是完全的;大多数时候它都很好,但大约每5次我们得到这个错误。这与文件本身无关,因为如果我们再试一次,它们会很高兴。

我们在网上发现了类似的问题 - 与PHP中的NAT设备错误有关,或者与防火墙配置有关,但再次暗示的是,如果是这种情况,它将永远不会起作用。

那么,为什么这有时有效,而其他时间则不行呢?


答案 1
ftp_set_option($ftpconn, FTP_USEPASVADDRESS, false);

设置连接无源性之前的这行代码ftp_pasv($ftpconn, true);

解决了我的问题


答案 2

FTP(S)使用随机端口来设置数据连接;间歇性成功率表示客户端和/或服务器计算机上的防火墙不允许所有端口。可以在 FTP 服务器中设置传入 (PASV) 数据连接的端口范围。

这个页面有一个很好的总结:

简单的方法是简单地允许FTP服务器和客户端通过防火墙无限制地访问,但是如果您想将其访问限制为“已知”端口,则必须了解4种不同的方案。

1) 应允许 FTP 服务器接受到端口 21 的 TCP 连接,并从端口 20 到任何(远程临时)端口建立 TCP 连接。

2)应该允许FTP服务器接受到端口21的TCP连接,并接受到任何临时端口的TCP连接!

3) 应允许 FTP 客户端与端口 21 建立 TCP 连接,并接受从端口 20 到任何临时端口的 TCP 连接。

4)应该允许FTP客户端与端口21建立TCP连接,并与任何其他(远程临时)端口建立TCP连接!


推荐