【php】ssh2_scp_sendでファイル転送する方法メモ
はじめに
あんまりやる機会なさそうだけど、次やるときのために一応メモ。
はまったこととしては、エラーは出ないのに一部のファイルが65536バイトまでしか転送できていなかったということ・・・
転送でファイルサイズの上限があるのかなとか思ったんですけど、そういうことではなくてちゃんとssh接続を切断すれば解決でした
ssh2_exec($connection, "exit");
実装
$host = ""; // ホスト名とかipアドレス $port = ""; // ポート番号 $user = ""; // sshアカウント $pass = ""; // sshパスワード $src_path = ""; // 転送元ファイルパス $dst_path = ""; // 転送先ファイルパス $connection = ssh2_connect($host, $port); if (!$connection) { // 接続エラー } if (!ssh2_auth_password($connection, $user, $pass)) { // 認証エラー } if (!ssh2_scp_send($connection, $src_path, $dst_path, 0644)) { // 転送エラー } // ★切断 これ重要! ssh2_exec($connection, "exit");
おまけ(ディレクトリ作成も)
転送する前にディレクトリの存在確認してなければ作成。というのもありがちなのでついでにメモ
$dir = ""; // 作成したいディレクトリパス ・・・ $sftp = ssh2_sftp($connection); if (!$sftp) { // sftp初期化処理エラー } // ディレクトリ存在確認 $stat = ssh2_sftp_stat($sftp, $dir); if (empty($stat)) { if (!ssh2_sftp_mkdir($sftp, $dir)) { // ディレクトリ作成エラー } } ・・・
便利ですね。以上です