読者です 読者をやめる 読者になる 読者になる

【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)) {
        // ディレクトリ作成エラー
    }
}

・・・

便利ですね。以上です