2017-05-01 10 views
2

それは正常に接続してlogo.pngファイルをアップロードしますが、ファイルの内容はウェブホスト上にあったものではなく、htmlアップロードコードを使用するとhtmlでアップロードされたものとは異なります。それがファイルに入れているのは、2番目のものの間のACTUALのテキストです。logo.pngの内容が文字通りlogo.pngであり、画像ではありません。phpseclibは正しいファイルの内容をアップロードしません

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

使用しているphpseclibのバージョンは何ですか? –

答えて

1

あなたはドキュメントを読んでしまう場合は、あなたがput()関数の第2引数は、そのためではないファイルパス$dataであることを見つけるだろうが、実際のデータを書き込むために:

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

デフォルトでは、NetSFTP::put()はローカルファイルシステムから読み取られません。 $data$remotefileに直接ダンプされます。

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

編集:あなたは、おそらく使用している[...]

をローカルファイルをアップロードするには、最も簡単な方法は、put()関数に渡されます一つの変数にコンテンツを読むことですphpseclibの新しいバージョンです。より多くのオブジェクトのようになりますrenamed these constants。新しいバージョンを使用すると、使用する必要があります

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

しかし、 'NET_SFTP_LOCAL_FILE'モードはデフォルトの動作よりも優先されます。 'NET_SFTP_LOCAL_FILE'では、' $ data'引数は実際にはパスです。 OPのコードは正しいですが、実際には間違っています。 –

+0

OPバージョンはこの機能をサポートしていない可能性があります。 – Jakuje

+0

実際には、phpseclibがSFTP(2009)をサポートして以来、 'NET_SFTP_LOCAL_FILE'がサポートされています:https://github.com/phpseclib/phpseclib/commit/d365b7a587afc7cb1712c4865fd48e9973a33f5d –