【问题标题】:CURL - Connect explicit FTP over TLSCURL - 通过 TLS 连接显式 FTP
【发布时间】:2015-09-03 07:29:18
【问题描述】:

我正在尝试使用加密作为基于 TLS 的显式 FTP 连接到 FTP 服务器。

curl_setopt($ch, CURLOPT_URL, 'ftp.mydomain.com/orders'.$filename);
curl_setopt($ch, CURLOPT_USERPWD, 'uname:pwd');
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $fp);
curl_setopt($ch, CURLOPT_PORT, 21);
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_exec ($ch);
$error_no = curl_errno($ch);

我必须将文件上传到这个位置,但是在连接到服务器时,它给出了错误号 56(响应读取失败)。 我不确定我是否使用正确的选项通过 TLS 显式连接 FTP。

【问题讨论】:

  • 您是否尝试过使用现成的 ftp 程序来访问与您的代码具有相同属性的服务器?
  • curl_error 返回什么?
  • 它返回消息“响应读取失败”。

标签: php ssl curl ftp


【解决方案1】:

不仅您没有启用 TLS/SSL。您甚至没有指定要使用的协议。 CURL 默认为 HTTP。因此,您的代码失败了,因为 CURL 尝试将 HTTP 与 FTP 服务器通信。

选择 FTP 并强制使用 TLS/SSL:

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_FTP);
curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_ALL);

【讨论】:

    【解决方案2】:

    试试下面的代码 -

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_FTP_SSL, CURLFTPSSL_TRY);
    curl_setopt($ch, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_TLS);
    

    【讨论】:

    • 建议不验证 TLS/SSL 证书是一种不好的做法。特别是没有任何解释。
    猜你喜欢
    • 2011-07-28
    • 2017-10-18
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多