【发布时间】:2018-07-10 08:01:06
【问题描述】:
我的应用程序连接到通过 VPN 连接到服务器的 FTP 客户端。到目前为止,所有客户端都支持主动 PHP,我使用的库默认使用主动 FTP,所以没有问题。然而,现在我们已经安装了一些新的客户端,它们不能通过主动 PHP 正常工作,所以我发现从服务器(通过 FTP cli 和 RDP 上的 FileZilla)可以通过被动连接连接到所有客户端并与之交谈。
但是,当尝试在 PHP 中建立被动连接时,所有 FTP 命令(例如nlist)都会超时。我遇到了this blog post,它为特定的被动 FTP 问题提供了一个补丁(现在在常规 PHP 版本中可用),所以我尝试像这样测试它:
$conn = ftp_connect($address);
$login = ftp_login($conn, 'username', 'password');
ftp_set_option($conn, USEPASVADDRESS, false);
ftp_pasv($conn, true);
$contents = ftp_nlist($conn, '.');
var_dump($contents);
ftp_close($conn);
ftp_pasv 返回 true,因此它正在切换到被动模式,但 ftp_nlist 超时,它不适用于主动模式和兼容的客户端。
PHP 的 FTP 实现和 FTP cli 应用程序有什么不同?
【问题讨论】:
-
您从
ftp_nlist收到的确切错误消息是什么? + 显示“FTP cli”日志文件(我是否正确理解您从同一台机器/服务器运行“FTP cli”的内容,您正在运行您的 PHP 代码?) -
“FTP cli”是
/usr/bin/ftp。ftp_nlist不会抛出错误,它只是超时并返回false。 -
你没有回答我所有的问题。
-
不确定ftp是否会写日志文件,所以我不知道去哪里找,我现在只能给你这个:pastebin.com/FUEXbBRN至于另一个问题,是的,我在运行 PHP 脚本的服务器上运行它。
-
所以在您的 PHP 代码中,
$address是192.168.12.10? + 你如何运行 PHP 代码?从命令行?来自与ftp相同的环境? + 您可以访问服务器端日志文件吗?如果没有,您可以进行 Wireshark 捕获(或类似操作)吗?