phpseclib não carrega o conteúdo correto do arquivo

Então, o que ele faz é se conectar com sucesso, então envia o arquivo logo.png mas o conteúdo do arquivo não é o que estava no host ou foi carregado com html se eu usar um código de upload html. O que ele coloca no arquivo é o texto REAL entre o segundo ‘s, então, para esse exemplo, o conteúdo do logo.png é literalmente logo.png e não a imagem.

 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); 

   

Se você ler a documentação, você descobriria que o segundo argumento da function put() é $data , portanto, não o caminho do arquivo, mas os dados reais para escrever:

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

Por padrão, NetSFTP::put() não é lido a partir do sistema de arquivos local. $data são despejados diretamente em $remotefile . […]

Para carregar um arquivo local, a maneira mais fácil é ler o conteúdo em uma variável que será passada para a function put() :

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

Edit: Você provavelmente está usando uma nova versão do phpseclib, que renomeou essas constantes para torná-las mais parecidas com objects. Com uma nova versão, você deve usar

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