PHPで他サーバにFTP経由にてファイルをアップロードする方法
2024/01/18
formで送信した内容をチェックした上で、他サーバにファイルをアップロードしたかった。調べたところFTP,HTTPが主力っぽい。FTPの場合は受信側にFTPサーバが必要となるが、受信チェック的なことは行わなくて良いのでスクリプトは送信側のみ。HTTPの場合は受信側にFTPサーバはいらないが、送受信共にスクリプトが必要。どちらも試したけどFTPの方が楽だったので以下にソースをメモ。
HTTP経由の場合(2017/03/08追記)
HTTP経由の方法も調べたので追記。
https://taitan916.info/blog/archives/2728
ソースコード
<?php if( $_FILES['file']['size'] > 0 ){ do{ $flg = false; //FTPサーバとアカウント情報 $server = "111.222.333.444"; //送り先のFTPサーバー名もしくはIP $user = "xxxxxxxxxx"; //送り先のFTPユーザ $pass = "xxxxxxxxxx"; //送り先のFTPパスワード $remoteDir = './test/'; //送り先のディレクトリ $localDir = './tmp/'; //ローカル側の一時アップロードディレクトリ //FTPサーバに接続 $ftp = ftp_connect($server); if( !$ftp ) break; //ログイン if( !ftp_login($ftp, $user, $pass) ) break; //FTPサーバ上でディレクトリ移動 if( !ftp_chdir($ftp, $remoteDir) ) break; //ローカル側に一度アップロード if( !move_uploaded_file($_FILES['file']["tmp_name"], $localDir . $_FILES['file']['name']) ) break; //アップロード $local = $localDir . $_FILES['file']['name']; //アップロードするファイル $remote = $_FILES['file']['name']; //アップロード時の名前 if( !ftp_put($ftp, $remote, $local, FTP_BINARY) ) break; //ローカル側のファイルを削除 unlink( $localDir . $_FILES['file']['name'] ); //接続を閉じる ftp_close($ftp); $flg = true; }while(0); if( $flg ){ //アップロード成功時の処理 }else{ //アップロード失敗時の処理 } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data"> <input type="file" name="file"><br> <input type="submit" value="submit"> </form> </body> </html>
その他
VPS→レンタルサーバ、VPS→VPS間でチェックしたところ問題なかった。レンタルサーバ→レンタルサーバはテスト環境が無かったので未チェック。
HTTPで送る場合はcURLで送るみたい。POSTで送って、受け取り側は普通にPHPで受け取る。
あと、だいぶ前に見たソースでSSHで送っていたケースがあったのでscpでやろうと思ったんだけどパスワード入力の突破の仕方が分からなかった。
関連記事
-
-
PHPにて配列の出力時にジェネレータを利用してメモリを節約する方法
PHPにて大量のデータが格納された配列をforeach等でループ処理するような場 ...
-
-
PHP5.4系でAPCが上手く動かなかったので5.5にアップデート&Zend OPcache導入
PHP5.3系から5.4系にアップデートしてから、WordPressがちょっと重 ...
-
-
MySQLでのバッククオート
phpmyadminを使っていると``←みたいな括りを見るけど これなんなん? ...
-
-
PHPでbool値(true / false)を文字列として出力する方法
PHPにてbool値(true / false)をechoで出力するとtrueは ...
-
-
CodeIgniter4で祝日一覧APIにCURLでリクエストし結果をファイルキャッシュする方法
Codeigniter4.4.4で祝日一覧APIにCURLでリクエストしたい。尚 ...