PHP FTP 失败并出现错误 ftp_nlist():php_connect_nonb() 失败:操作正在进行中 (115)

PHP FTP fails with error ftp_nlist(): php_connect_nonb() failed: Operation now in progress (115)

我在尝试使用 PHP FTP 函数发送文件时遇到问题。

我正在尝试使用网络服务器上的 PHP 函数 运行 将文件 (PDF) 从网络服务器 (UNIX) 发送到办公室的 Windows 服务器。 FTP 已安装在 Windows 服务器上。

函数连接办公服务器,登录成功。但是,一旦该函数尝试执行任何操作(例如列出办公室服务器目录的内容),我就会收到错误消息(例如... ftp_nlist(): php_connect_nonb() failed: Operation now in progress (115))。目标服务器记录错误:[Administration Server] Couldn't bind on 192.168.1.1:14148. Reason: EADDRINUSE - Local address in use. Retrying in 1 seconds。我已尝试查找这些错误,但一直无法找到对我有帮助的任何内容。

连接需要是被动的,从 SO 中的其他答案来看,我认为使用错误的 IP 地址停止被动模式很重要。所以现在也在那里 (ftp_set_option($ftp_conn, FTP_USEPASVADDRESS, false)) 但我仍然遇到同样的错误。

我在使用 SSL 或非 SSL 连接时遇到同样的问题。

我已经设法得到对 ftp_systype 的回复,它告诉我“UNIX”。

其他人在 SO 上谈到导致此错误的间歇性问题(例如 "php_connect_nonb() failed: Operation now in progress (115)" happens intermittently),但对我来说这是一个持续的错误。我已经检查过 FTP 服务器设置为 return 建立被动模式时的外部 IP 地址。我也了解到 PHP 的旧版本存在一些问题。我的网络服务器上有 PHP v7.4。

我可以使用 Filezilla 和 WinSCP 毫无问题地连接(和复制文件),只是在使用 PHP 功能时没有问题。

PHP函数包含:

$ftp_conn = ftp_ssl_connect($ftp_server, $ftp_port); // response is resource(2) of type (FTP Buffer)
$login = ftp_login($ftp_conn, $username, $password);
$result = ftp_set_option($ftp_conn, FTP_USEPASVADDRESS, false);
$result = ftp_pasv($ftp_conn, true);
echo '<br>The system type is: '.ftp_systype($ftp_conn); // The system type is: UNIX
$already_there = ftp_nlist($ftp_conn, '.'); // this triggers the error!

我希望有人能给我指出正确的方向或建议我尝试其他方法。

非常感谢!

确保您的网络服务器托管允许传出 FTP 数据连接。

FTP 数据连接(在被动模式下)需要在防火墙中打开单独的端口范围,而不仅仅是控制连接端口 21。

详见我的article on FTP connection modes