【问题标题】:Using cURL to connect to SFTP server使用 cURL 连接到 SFTP 服务器
【发布时间】:2017-10-26 17:18:05
【问题描述】:

我正在尝试从 SFTP 服务器获取 .csv 文件,然后将其保存在本地。我正在使用以下代码,但它似乎不起作用。

<?php

$user = 'username';
$pass = 'password';
$host = 'order.domain.com';
$file = 'filename.csv';

$remote = "sftp://$user:$pass@$host/$file";
$local = getcwd() . '/' . $file;

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $remote);
curl_setopt($curl, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
curl_setopt($curl, CURLOPT_USERPWD, "$user:$pass");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
file_put_contents($local, curl_exec($curl));
curl_close($curl);

?>

它似乎是在当前工作目录中创建filename.csv 文件,但它是空白的。

似乎 curl 没有连接到远程服务器?也许 curl 不是为 SFTP 设置的?

【问题讨论】:

标签: php curl sftp


【解决方案1】:

来自the documentation

目前支持 http、https、ftp、gopher、telnet、dict、file 和 ldap 协议

请注意,SFTP 和 FTP 尽管名称相似,但非常不同。

如果您需要 SFTP,则需要使用专门设计的工具。见this question

【讨论】:

  • 我已经尝试使用 PHP 的 SSH2 扩展,但我无法让它工作。经过数小时尝试让它工作后,我发现它需要安装另外 2 个 PHP 库,当我查找这些库时,它们只是一堆文件,没有关于如何使用它们的说明。我已经研究过的另一个解决方案 phpsecl 我也无法工作,因为它需要作曲家,它需要运行我的 php.ini,但由于启用了 curl 而无法执行?
  • 另外,从我读到的 cURL 确实支持 SSH 文件传输协议 (SFTP)。我在这里找到了很多关于堆栈溢出和其他一些博客的示例,但无法让它们亲自工作。