![](/img/trans.png)
[英]PHP: ftp_rawlist always returns false, even when in passive mode
[英]ftp_rawlist always fails on FTPES server with passive mode
我必须连接到 FTPES 服务器才能检索数据。 连接和登录工作正常,但我与ftp_rawlist
调用总是失败并返回“false”。
我将此代码用于调试目的:
$ftp = ftp_ssl_connect($ftp_host);
if (ftp_login($ftp, $ftp_user, $ftp_pass)) {
$p = ftp_pasv($ftp, true);
var_dump($p);
$r = ftp_rawlist($ftp, '/', true);
var_dump($r);
} else {
echo 'Could not login';
}
$p
始终为真, $r
始终为假。
当我通过 Filezilla 连接到服务器时,一切正常,我可以列出目录内容等。
更新 #1:尝试不仅列出 '/' 还列出服务器上的各种子文件夹,它们都无法通过脚本。
更新 #2:还尝试将ftp_raw
与命令一起使用来获取列表,但 LIST 命令运行了一段时间,然后根本不返回任何结果。 但是 HELP 将 LIST 列为服务器的有效命令......奇怪......
更新 #3:我现在尝试了 phpseclib,但是虽然可以连接,但无法使用用户/密码组合登录。 来自 FTPES 服务器维护者的支持没有发生(“适用于其他人......”),所以我需要以另一种方式解决这个问题...... :-)
以此结束:随着该项目的截止日期越来越近,必须找到解决方案。 虽然从问题的意义上说这不是真正的答案,但我想展示我为解决这个问题所做的工作。 也许有人通过谷歌搜索偶然发现了这一点。
在 OP 中提到的内容旁边,我还尝试使用 PHP 和证书作为身份验证连接到 FTPS,但这也不起作用。 由于没有任何事情可以正常工作,我想知道 FTPS 服务器是否真的配置正确。
运行服务器的人告诉我一切都很好,他们的 CLI CURL 调用对他们来说很好用,所以他们不需要进一步调查问题。
因此,我在启用了shell_exec()
的服务器上设置了一个沙箱帐户。 现在有一个脚本正在运行,它通过 CURL 获取文件列表,然后使用服务器提供商提供的命令通过 CURL 下载文件。 该服务器可以通过普通 SFTP 访问,因此充当“代理 FTP”,定期镜像远程 FTPS 服务器文件结构。
虽然我发现这个“解决方案”相当“hacky”,但目前它似乎运行健壮、稳定和快速。 因此,我们今年将能够以这种方式运行(它仅在圣诞节前三个月左右运行),并在新的一年中进行研究并开发更稳定的解决方案。
也许服务器人员那时压力也较小并且愿意提供帮助...... ;-)
在调用ftp_pasv
之前的一行中添加以下对ftp_set_option()
的调用
ftp_set_option($ftp, FTP_USEPASVADDRESS, false);
ftp_pasv($ftp, true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.