问题
So what it does is successfully connects then uploads the file logo.png
but the contents of the file isn't what was on web host or uploaded with html if i use a html upload code. What it puts in the file is the ACTUAL text between the second ' 's so for that very example the contents of logo.png is literally logo.png
and not the picture.
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:
If you would read through the documentation, you would find out that the second argument of the put() function is $data
, therefore not the file path, but the actual data to write:
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
. [...]
To upload a local file, the easiest way is to read the content into one variable that will be passed to the put()
function:
$data = file_get_contents("logo.png");
$sftp->put("/some/path/logo.png", $data);
Edit: You are probably using a new version of phpseclib, which renamed these constants to make them more object-like. With a new version, you should use
$sftp->put("/some/path/logo.png", "logo.png", SFTP::SOURCE_LOCAL_FILE);
来源:https://stackoverflow.com/questions/43725452/phpseclib-doesnt-upload-correct-file-contents