phpseclib 未上传正确的文件内容

标签 php sftp phpseclib

所以它所做的是成功连接然后上传文件 logo.png 但文件的内容不是网络主机上的内容,也不是使用 html 上传的内容(如果我使用 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);

关于phpseclib 未上传正确的文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43725452/

相关文章:

php - 如何在空格后分割内容

php - 使用 PHP 在每个月的 HTML 表中显示日期

通过 sftp 从远程服务器下载 PHP

php - 使用 phpseclib 使用 SCP 上传文件

php - 按两个值排序关联数组 PHP

javascript - 使用ajax使用php更新mysql表

java - 使用 Jsch 绕过或强制 session 身份验证

linux - sftp chroot 目录上的公钥授权

php - 如何使用 phpseclib 设置 Cron Job?

php - 如何使用phpseclib通过SFTP检查上传的文件是否存在