[PHP] FTPでのアップ/ダウンロード
備忘録
基本は以下でok
- ftp_connect
- ftp_login
- ftp_pasv
- 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とする。
-
ftp_put($connection, 'hoge.txt', 'fuga.txt', FTP_BINARY)
クライアントの「/home/fuga/fuga.txt」がサーバに「/home/hoge/hoge.txt」としてアップロードされる -
ftp_get($connection, 'fuga.txt', 'home.txt', FTP_BINARY)
サーバの「/home/hoge/hoge.txt」がクライアントに「/home/fuga/fuga.txt」としてアップロードされる