【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)) {
// ディレクトリ作成エラー
}
}
・・・
便利ですね。以上です