我必须连接到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
始终为true,$r
始终为false。
当我通过Filezilla连接到服务器时,一切正常,并且我可以列出目录内容等等。
更新#1:试图不仅列出'/',而且列出服务器上的各个子文件夹,它们都无法通过脚本执行。
更新#2:还尝试将ftp_raw
与命令一起使用以获取列表,但是LIST命令运行一段时间,然后根本不返回任何结果。但是HELP将LIST列为服务器的有效命令...奇怪...
更新#3:我现在尝试了phpseclib,但是虽然可以连接,但无法使用用户名/密码组合登录。 FTPES服务器维护者的支持没有发生(“对于其他人来说工作正常……”),所以我需要找出另一种方式...:-)
答案 0 :(得分:0)
要结束此问题:随着该项目的最后期限越来越近,必须找到解决方案。尽管从某种意义上说这不是真正的答案,但我还是想展示一下如何解决此问题。也许有人通过谷歌搜索偶然发现了这一点。
除了OP中提到的内容,我还尝试了connecting to FTPS using PHP and certificate as auth,该方法也不起作用。由于没有按预期的方式工作,我想知道FTPS服务器是否真的配置正确。
运行服务器的人告诉我,一切都很好,他们的CLI CURL调用对他们也很好,因此他们无需进一步调查问题。
因此,我在启用了shell_exec()
的服务器上设置了一个沙箱帐户。现在正在运行一个脚本,该脚本通过CURL获取文件列表,然后使用服务器提供商提供的命令通过CURL下载文件。该服务器可以通过普通的SFTP访问,因此可以充当“代理FTP”,定期镜像远程FTPS服务器文件结构。
尽管我发现此“解决方案”相当“ hacky”,但目前看来它运行可靠,稳定且快速。因此,我们将能够在今年(仅在圣诞节前三个月左右)以这种方式运行该业务,并在新的一年中对其进行研究,并开发出更稳定的解决方案。
也许服务器人员的压力也减轻了,他们愿意帮助...;-)
答案 1 :(得分:0)
将以下调用添加到ftp_set_option()
的行之前的行ftp_pasv
ftp_set_option($ftp, FTP_USEPASVADDRESS, false);
ftp_pasv($ftp, true);