外部サーバにsftpでファイルをアップロード、ダウンロード、ファイル一覧を取得するphpのメモ。
peclライブラリのssh2をインストールする必要あり。
(インストールはやってもらったので、詳しくはわからない)
(scp)リモートサーバへの接続・ファイルアップロード
$filename = "ex.txt";
$remote = (アップロードするサーバディレクトリの絶対パス) . $filename;
$local = (ローカルサーバの絶対パス) . $filename;
$connect = ssh2_connect('example.com', 22);
if (!ssh2_auth_password($connect, '(FTPのID)', '(FTPのpassword')) {
echo 'サーバへの接続に失敗しました。';
} else {
if (!ssh2_scp_send($connect, $local, $remote, 0644)) {
echo 'ファイルのアップロードに失敗しました。';
} else {
echo 'ファイルをアップロードしました。';
}
}
ssh2_exec($conn, "exit");
unset($conn);
(SFTP)リモートサーバへの接続・ファイル書き込み
$filename = "ex.txt";
$remote = (アップロードするサーバディレクトリの絶対パス) . $filename;
$connect = ssh2_connect('example.com', 22);
if (!ssh2_auth_password($connect, '(FTPのID)', '(FTPのpassword')) {
echo 'サーバへの接続に失敗しました。';
} else {
if (!$sftp = ssh2_sftp($connect)) {
echo 'ファイルの書き込みに失敗しました。';
} else {
$sftp_pass = "ssh2.sftp://".$sftp.$remote;
if ($stream = fopen($sftp_pass, 'w+')) {
fputs($stream, "書き込む内容");
fclose($stream);
echo 'ファイルを書き込みました。';
} else {
echo 'ファイルの書き込みに失敗しました。';
}
}
}
ssh2_exec($conn, "exit");
unset($conn);
※基本的に書き方がおかしいかもしれないけど、これで動いた。
リモートサーバへの接続・ファイルダウンロード
$filename = "ex.txt";
$remote = (ダウンロードするサーバディレクトリの絶対パス) . $filename;
$local = (ローカルサーバの絶対パス) . $filename;
$connect = ssh2_connect('example.com', 22);
if (!ssh2_auth_password($connect, '(FTPのID)', '(FTPのpassword')) {
echo 'サーバへの接続に失敗しました。';
} else {
if (!ssh2_scp_recv($connect, $remote, $local)) {
echo 'ファイルのダウンロードに失敗しました。';
} else {
echo 'ファイルをダウンロードしました。';
}
}
リモートサーバへの接続・ファイル一覧取得
$connect = ssh2_connect('example.com', 22);
if (!ssh2_auth_password($connect, '(FTPのID)', '(FTPのpassword')) {
echo 'サーバへの接続に失敗しました。';
} else {
$stream = ssh2_exec($connect, 'ls -1F (ファイル一覧を取得するサーバディレクトリの絶対パス)');
stream_set_blocking($stream, true);
$list = fread($stream, 4096);
fclose($stream);
$list_array = explode("\n", $list);
}
ssh2_exec($conn, "exit");
unset($conn);
リモートサーバへの接続・ファイル削除
$filename = "ex.txt";
$remote = (ダウンロードするサーバディレクトリの絶対パス) . $filename;
$connect = ssh2_connect('example.com', 22);
if (!ssh2_auth_password($connect, '(FTPのID)', '(FTPのpassword')) {
echo 'サーバへの接続に失敗しました。';
} else {
$sftp = ssh2_sftp($connect);
if (!ssh2_sftp_unlink($sftp, $remote)) {
echo 'ファイルの削除に失敗しました。';
} else {
echo 'ファイルを削除しました。';
}
}
※ssh2_execではなくssh2_shellを使った方がいいらしいけど、
これで動いてるから、またの機会に調べることにする。