LoginSignup
27

More than 5 years have passed since last update.

posted at

updated at

Organization

[PHP] FTPでのアップ/ダウンロード

[PHP] FTPでのアップ/ダウンロード

備忘録
基本は以下でok
1. ftp_connect
2. ftp_login
3. ftp_pasv
4. ftp_put/get

アップロード

コード

$ftpValue = array(
    'ftp_server' => FTP_ADDRESS,
    'ftp_user_name' => FTP_USER,
    'ftp_user_pass' => FTP_PASS
);
$remote_file = REMOTE_FILE_NAME;
$upload_file = LOCAL_FILE_NAME;

$connection = ftp_connect($ftpValue['ftp_server']);

$login_result = ftp_login(
    $connection,
    $ftpValue['ftp_user_name'],
    $ftpValue['ftp_user_pass']
);

ftp_pasv($connection, true);
$ftpResult = ftp_put($connection, $remote_file, $upload_file, FTP_BINARY, false);

if (!$ftpResult) {
    throw new InternalErrorException('Something went wrong.');
}

ftp_close($connection);

ダウンロード

コード

$ftpValue = array(
    'ftp_server' => FTP_ADDRESS,
    'ftp_user_name' => FTP_USER,
    'ftp_user_pass' => FTP_PASS
);
$remote_file = REMOTE_FILE_NAME;
$download_file = LOCAL_FILE_NAME;

$connection = ftp_connect($ftpValue['ftp_server']);

$login_result = ftp_login(
    $connection,
    $ftpValue['ftp_user_name'],
    $ftpValue['ftp_user_pass']
);

//リモートでのファイル存在チェック
if(ftp_size($connection, REMOTE_FILE_NAME)){
    ftp_pasv($connection, true);
    $ftpResult = ftp_get($connection, $download_file, $remote_file, FTP_BINARY, false);
}

if (!$ftpResult) {
    throw new InternalErrorException('Something went wrong.');
}

ftp_close($connection);

メモ

ftp_pasv … パッシブモードのオン/オフ

ダウンロードでもアップロードでもこんなエラーが出るときにはパッシブモードをオンにしましょう。
ftp_get(): Illegal PORT command.
パッシブモードについて
* http://e-words.jp/w/PASV%E3%83%A2%E3%83%BC%E3%83%89.html
* http://www.rtpro.yamaha.co.jp/RT/FAQ/TCPIP/ftp-passive-mode.html
要は、FTPクライアント側がファイヤーウォールの内側にいるときは、サーバ側からのポート要求に応えられないため、クライアント側からコネクションを要求しちゃえと解釈。
あと、明示的にパッシブモードをオン/オフにするときは、それに合わせてftp_put/getの第5引数に気を付けよう。

アップロード先/ダウンロード元

ftp_loginに使用したユーザのホームディレクトリが起点となる。
例:クライアントユーザをhoge サーバのユーザをfugaとする。
1. ftp_put($connection, 'hoge.txt', 'fuga.txt', FTP_BINARY)
クライアントの「/home/fuga/fuga.txt」がサーバに「/home/hoge/hoge.txt」としてアップロードされる
2. ftp_get($connection, 'fuga.txt', 'home.txt', FTP_BINARY)
サーバの「/home/hoge/hoge.txt」がクライアントに「/home/fuga/fuga.txt」としてアップロードされる

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
27