繁体   English   中英

ftp_rawlist 在被动模式下的 FTPES 服务器上总是失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM