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

时间:2013-03-28 17:27:09

标签: 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 ]

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

我们在网上发现了类似的问题 - 与使用NAT设备的bug in PHP相关或与防火墙配置有关但又暗示如果是这种情况则从不工作

那么,为什么这种情况会有效而不是其他情况呢?

5 个答案:

答案 0 :(得分:5)

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

This page有一个很好的总结:

  

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

     

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

     

2)应允许FTP服务器接受到端口的TCP连接   21,AND也接受到任何短暂端口的TCP连接!

     

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

     

4)应允许FTP客户端与端口建立TCP连接   21,并与任何其他(远程短暂)端口建立TCP连接   还有!

答案 1 :(得分:1)

所以,我在对我的FTP服务器进行一些调查并阅读你提供的链接elitehosts.com之后,我正在写这个答案。

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

在我设置之后,它工作了!不是非常确定你的FTP服务器是否是NAT,但我想我会在这个帖子上提供答案,因为它看似相关。

答案 2 :(得分:0)

除了Cees的答案,我还在ec2上运行vsftp,并且不得不注释掉listen_ipv6 = YES,listen = YES然后“服务vsftpd重新启动”。

尽管文档说它也会监听ipv4,但这已经解决了问题。

答案 3 :(得分:0)

ftp_set_option($ftpconn, FTP_USEPASVADDRESS, false);

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

解决了我的问题

答案 4 :(得分:0)

对我来说,我所要做的就是删除 ftp_pasv( $ftpconn, true ); 并且一切正常。我还不确定为什么,但我正在努力找出原因,当我找到背后的原因时,我肯定会回来。