phpseclib 没有上传正确的文件内容
phpseclib doesn't upload correct file contents
所以它所做的是成功连接然后上传文件 logo.png
但文件的内容不是网络主机上的内容或如果我使用 html 上传的内容=] 上传代码。它放入文件中的是第二个 ' 之间的实际文本,因此对于这个例子, 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);
如果您通读文档,您会发现 put()
函数的第二个参数是 $data
,因此不是文件路径,而是要写入的实际数据:
function put($remote_file, $data, $mode = NET_SFTP_STRING, $start = -1, $local_start = -1)
By default, NetSFTP::put()
does not read from the local filesystem. $data
is dumped directly into $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);
所以它所做的是成功连接然后上传文件 logo.png
但文件的内容不是网络主机上的内容或如果我使用 html 上传的内容=] 上传代码。它放入文件中的是第二个 ' 之间的实际文本,因此对于这个例子, 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);
如果您通读文档,您会发现 put()
函数的第二个参数是 $data
,因此不是文件路径,而是要写入的实际数据:
function put($remote_file, $data, $mode = NET_SFTP_STRING, $start = -1, $local_start = -1)
By default,
NetSFTP::put()
does not read from the local filesystem.$data
is dumped directly into$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);