【问题标题】:PHP Curl SFTP download working local but not on the serverPHP Curl SFTP 下载在本地工作但不在服务器上
【发布时间】:2021-02-04 14:17:25
【问题描述】:

我在这里和那里挑选了一些代码,以确保我可以从 sFtp 服务器直接在浏览器中下载文件。

当我在本地运行脚本时,它运行良好,它下载文件就好了。当我将它上传到我的 ubuntu 20.04 服务器并转到浏览器中的 url 时。得到通知他要下载。只有文件只有0字节。

脚本:

header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"demo.pdf\""); 

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "sftp://".$host."/demo.pdf");
curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($curl, CURLOPT_USERPWD, "$username:$password");
curl_exec($curl);
curl_close($curl);

Curl PHP 扩展已安装在服务器上。

(编辑)修复(我认为):

当我添加以下行时。它会起作用的:

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

【问题讨论】:

  • 你尝试过什么调试问题?
  • 你需要检查curl_error()的输出
  • @Nico Haase:添加 curl_error() 检查。但它不会给出任何输出。直接在服务器上测试 curl 可能有我不知道的防火墙问题。但这很有效。
  • 所以尝试其他方法来调试问题。例如,设置CURLOPT_RETURNTRANSFER 并调用curl_getinfo()
  • @Martin Prikryl 感谢您的回复。我检查 curl_getinfo('request_header') 和其他参数,但我在 http_code 处只得到一个 0。

标签: php curl sftp


【解决方案1】:

请检查您的 php.ini 设置并确认 curl_exec 功能没有被禁用。您还可以查看网络服务器日志以了解更多信息。

【讨论】:

  • 感谢您的回复。我检查了我的 php.ini 文件并启用了它。并且网络服务器错误日志是空的。但我认为找到了解决方案并编辑了我的帖子:)
【解决方案2】:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

【讨论】:

  • 设置这些是一个安全漏洞。而不是CURLOPT_SSL_VERIFYHOST,设置CURLOPT_SSH_HOST_PUBLIC_KEY_MD5CURLOPT_SSL_VERIFYPEER 对 SFTP 连接没有影响。此外,如果主机密钥有问题,curl_error() 应返回 "SSL 对等证书或 SSH 远程密钥不正常"
猜你喜欢
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
相关资源
最近更新 更多