あぼかどブログ > Web > PHP > phpメモ:sftpでファイルをアップロード・ダウンロード

phpメモ:sftpでファイルをアップロード・ダウンロード

外部サーバに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を使った方がいいらしいけど、
これで動いてるから、またの機会に調べることにする。

【前後の記事】
«
 
»
 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です