我们发送一些文件传达给第三方通过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次1,我们得到这个错误。 这不是文件本身做的,因为如果我们再试一次,他们会愉快地。
我们发现类似的问题在线-关于一个错误的PHP与NAT设备或做防火墙配置,但再次的含义是,如果是这样的情况下,它永远不会成功。
那么,这究竟是为什么会工作一些时间,而不是别人?
FTP(S)使用随机端口建立数据连接 ; 间歇成功率表明,并非所有的端口是由客户端和/或服务器计算机上的防火墙。 传入(PASV)数据连接的端口范围可以在FTP服务器进行设置。
此页面有一个很好的总结:
最简单的方法是简单地通过防火墙允许FTP服务器和客户端无限制的访问,但如果你想限制他们对“已知”端口的访问,你必须了解的4个不同的场景。
1)FTP服务器应允许接受端口21的TCP连接,并且使TCP连接从端口20到任何(远程短暂)端口。
2)FTP服务器必须允许接受的TCP连接到端口21,并接受TCP连接到任何临时端口以及!
3)FTP客户端应该允许进行到端口21的TCP连接,并接受任何临时端口从20端口的TCP连接。
4)FTP客户端应该允许进行TCP连接到端口21,并且使TCP连接到任何其他(远程临时)端口以及!
所以,我做我的FTP服务器上的一些调查和阅读你提供elitehosts.com链接后写这个答案。
我使用的FileZilla FTP服务器,并有我不得不进入,使其工作具体设置。 进入服务器设置,有一个标题为“被动模式设置”的区域。 在该对话框中,有一个标题为“IPv4的具体”的区域,该区域内有一个名为“被动模式传输外部服务器IP地址”设置。 这是一个单选按钮选择集,它是“默认”,但由于FTP服务器被NAT,我改变了从“默认”单选选择设置为“使用下面的IP:”和面向外部的IP进入通过我的ISP提供的网关我的地址。
我设置了后,它的工作! 并不十分肯定,如果你的FTP服务器被NAT,但我想我会提供这个线程的答案,因为它似乎相关。
除了塞斯答案,我在EC2上运行VSFTP,不得不注释掉listen_ipv6 = YES,听= YES,那么“服务vsftpd的重启”。
虽然文件说,它会听的IPv4以及它不是,这解决了问题。
文章来源: “php_connect_nonb() failed: Operation now in progress (115)” happens intermittently