通过PHP将文件从LAMP堆栈发送到Windows SFTP服务器

时间:2010-12-08 17:24:25

标签: php ssh lamp sftp

通过PHP将文件从Linux服务器通过SFTP发送到Windows服务器时遇到了很多麻烦。
我似乎连接得很好,但它总是抛出一个错误,我不能在远程服务器端创建文件。我可能会弄乱文件位置的语法。

我现在尝试了两种方法,一种使用ssh2_scp_send(),另一种尝试 fopen(ssh2.sftp://D:/path/file.csv)

此外,通过客户端登录sftp服务器将我放在我的主文件夹(即D:\ path \ to \ home)但如果我这样做 ssh2_exec($connection, 'cd'); 并将流打印到屏幕上,它向我显示我的ssh会话当前位于C盘上的Windows文件系统中。

我希望有人会就此提出一些建议。而且我没有和这种方法结婚。我正在使用php,因为它全部来自drupal模块,但我总是可以尝试使用另一种方法。

2 个答案:

答案 0 :(得分:1)

如果你想要做的就是发送一个文件,我认为curl有效,但是如果你想做更多的事情 - 比如可能验证文件已经上传,上传多个文件,使用publickey认证等等,卷曲只是不够多才多艺。

我的建议是使用phpseclib, a pure PHP SFTP implementation

答案 1 :(得分:0)

CURL可以使用sftp库。

$localfile = 'test.txt';
  $ch = curl_init();
  $fp = fopen ($localfile, "r") or die('Cannot open textfile');
  curl_setopt($ch, CURLOPT_URL,"sftp://123.123.123.123:10022/username/test.txt");
  curl_setopt($ch, CURLOPT_USERPWD, "username:password");
  curl_setopt($ch, CURLOPT_UPLOAD, 1);
  curl_setopt($ch, CURLOPT_INFILE, $fp);
  if(curl_exec($ch)){
    echo 'File was successfully transferred using SFTP';
  }else{
    echo 'File was unable to be transferred using SFTP';
  }

  curl_close ($ch);