phpseclib没有上传正确的文件内容

时间:2017-05-01 19:46:54

标签: php sftp phpseclib

它的作用是成功连接然后上传文件logo.png,但文件的内容不是网页主机上的内容,或者如果我使用html上传代码,则使用html上传。它放在文件中的是第二个'之间的ACTUAL文本。因此,对于这个例子,logo.png的内容字面上是logo.png而不是图片。

require_once("ftp/vendor/autoload.php");

use phpseclib\Net\SFTP;

$sftp = new SFTP('SERVER');

if (!$sftp->login('USER', 'PW')) {
    throw new Exception('Login failed');
}

$sftp->put("/some/path/logo.png", "logo.png", NET_SFTP_LOCAL_FILE);

1 个答案:

答案 0 :(得分:1)

如果您阅读文档,您会发现put()函数的第二个参数是$data,因此不是文件路径,而是要写入的实际数据:

  

function put($remote_file, $data, $mode = NET_SFTP_STRING, $start = -1, $local_start = -1)

     

默认情况下,NetSFTP::put()不会从本地文件系统读取。 $data会直接转储到$remotefile。 [...]

要上传本地文件,最简单的方法是将内容读入一个将传递给put()函数的变量:

$data = file_get_contents("logo.png");
$sftp->put("/some/path/logo.png", $data);

编辑:你可能正在使用新版本的phpseclib,renamed these constants使它们更像对象。使用新版本时,您应该使用

$sftp->put("/some/path/logo.png", "logo.png", SFTP::SOURCE_LOCAL_FILE);