【问题标题】:Send files from LAMP stack to Windows SFTP server via PHP通过 PHP 将文件从 LAMP 堆栈发送到 Windows SFTP 服务器
【发布时间】:2011-05-22 09:06:43
【问题描述】:

我在通过 PHP 通过 SFTP 将文件从 linux 服务器发送到 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 模块,但我总是可以尝试并合并另一种方法。

【问题讨论】:

  • 你看过 CURL 吗?它具有通过 SFTP 发送的能力。
  • 我还没有,但这是我的下一个计划。我只是希望我为远程 Windows 服务器获得正确的路径。我不熟悉为 Windows 格式化它,如果我需要在路径中包含驱动器等。

标签: php ssh lamp sftp


【解决方案1】:

CURL 可以使用 th 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);

【讨论】:

    【解决方案2】:

    如果您只想发送一个文件,我想 curl 可以工作,但如果您想做更多的事情 - 比如验证文件是否已上传、上传多个文件、使用公钥身份验证或其他什么, curl 只是不够通用。

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

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 2014-05-10
      • 2014-09-09
      相关资源
      最近更新 更多