LoginSignup
21
27

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-10-22

[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」としてアップロードされる

21
27
0

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
  3. You can use dark theme
What you can do with signing up
21
27