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

Mik*_*y C 9 php linux ftp

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

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

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

当我说"有时"时我就是这么说的; 大多数情况下,它会很好,但我们得到的错误大约是五分之一.这与文件本身无关,因为如果我们再试一次,它们会很愉快.

我们在网上发现了类似的问题 - 与使用NAT设备的PHP中错误或与防火墙配置有关的问题,但这意味着,如果是这种情况,它将无法工作.

那么,为什么有些时候会有效呢?

小智 11

ftp_set_option($ftpconn, FTP_USEPASVADDRESS, false);
Run Code Online (Sandbox Code Playgroud)

设置被动连接前的这行代码 ftp_pasv($ftpconn, true);

解决了我的问题


Cee*_*man 6

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

此页面有一个不错的摘要:

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

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

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

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

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


ari*_*tav 2

因此,我在对我的 FTP 服务器进行了一些调查并阅读了您提供的 Elitehosts.com 链接后写了这个答案。

我正在使用 FileZilla FTP 服务器,并且我必须输入一个特定的设置才能使其正常工作。进入服务器设置,有一个标题为“被动模式设置”的区域。在该对话框中,有一个标题为“IPv4 特定”的区域,并且在该区域内有一个标记为“用于被动模式传输的外部服务器 IP 地址:”的设置。这是一个单选按钮选择集,处于“默认”状态,但由于 FTP 服务器经过 NAT,我将该单选选项从“默认”更改为“使用以下 IP:”并输入面向外部的 IP我的 ISP 提供的网关地址。

我这样设置后,成功了!不太确定您的 FTP 服务器是否经过 NAT,但我想我会在此线程上提供答案,因为它似乎相关。