【问题标题】:Open text file on a FTP account with PHP使用 PHP 在 FTP 帐户上打开文本文件
【发布时间】:2018-06-08 16:55:06
【问题描述】:

我正在尝试读取 FTP 帐户上的 CSV 文件,但我用于其他帐户的相同代码不再有效。

这个新的 FTP 帐户,例如,当我使用 FileZilla 连接到它时,会显示一个显示有关证书的窗口。我必须同意,我可以通过程序正常访问 FTP 文件。我想这个证书是我问题的原因。

这是我正在使用的代码:

$filename = "ftp://$user:$pass@$host/filename.csv";

 $fh = fopen($filename, "r");

 while (!feof($fh)) {
    $line = fgets($fh);
    var_dump($line);
 }
 fclose($fh);

有没有办法更改我的代码以考虑此涉及证书的 FTP 帐户的要求?

【问题讨论】:

    标签: php csv ftp fopen


    【解决方案1】:

    我目前没有要测试的服务器,但在使用流包装器时允许使用无效证书(我认为这是问题所在),您需要创建一个正确的 stream context 并将其作为 fopen() 的第四个参数传递。适用的上下文选项是FTPSSL。您可能希望将verify_peer 设置为false

    $context = stream_context_create([
        'ssl' => [
            'verify_peer'       => false,
            'verify_peer_name'  => false,
            'allow_self_signed' => true,
        ]
    ]);
    $fh = fopen($filename, 'r', false, $context);
    

    【讨论】:

    • 你能帮我举一个简单的例子吗?阅读文档并没有太大帮助。
    • 仍然无法连接.. 还有其他建议吗?
    • 您是否确认您实际上可以看到错误消息(如果有)?一种简单的方法是故意犯错误,例如键入无效的主机。
    • 我这样做了:ini_set('track_errors', 1); $fh = fopen($filename, 'r', false, $context); if ( !$fh ) { echo 'fopen failed. reason: ', $php_errormsg; } 我收到这条消息:打开流失败:操作失败
    • 我从 ftp 主机的链接中删除了“ftp://”,现在我可以连接了。感谢您帮助 Álvaro González!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多