PHPで他サーバにファイルをアップロードする
2017/03/08
formで送信した内容をチェックした上で、他サーバにファイルをアップロードしたかった。
調べたところFTP,HTTPが主力っぽい。FTPの場合は受信側にFTPサーバが必要となるが、受信チェック的なことは行わなくて良いのでスクリプトは送信側のみ。HTTPの場合は受信側にFTPサーバはいらないが、送受信共にスクリプトが必要。
どちらも試したけどFTPの方が楽だったので以下にソースをメモ。
■2017/03/08追記
HTTP経由の方法も調べたので追記。
https://taitan916.info/blog/?p=2728
■ソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
<?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で画像のサイズや拡張子等、詳細情報を取得する際 いつもググってしまっていた ...
-
-
PHPで配列じゃないものに対してソート
PHP Warning: sort() expects parameter 1 ...
-
-
MySQLで重複を除く
ユニークな値を取り出したいときに使う。 DISTINCT(ディスティンクト) S ...
-
-
PHPで画像にロゴをつける
フォームから送られてきた画像にロゴをつけたかった。 結論としてclass.upl ...
-
-
ディレクトリに設置してあるフォルダをPHPで調べて表示
やりたい事はsampleというディレクトリがあったとして、その直下にあるフォルダ ...
-
-
PHPでdatetime型を分割する
datetime型を年月日時分秒でそれぞれに 分割させたい時に、今まではいちいち ...
-
-
PHPでパーミッションの変更
chmodというみたことが無いPHP関数があったのでメモ。 ■参考サイト htt ...
-
-
$_SERVER['PHP_SELF']に脆弱性あり
formのaction属性とかページングのリンクとかで、 <form ac ...
-
-
javascriptとPHPで正規表現を使う場合
とりあえず使いそうなのは検索と置換。 ■javascript var str = ...
-
-
WordPressで任意のクエリをページに出力するプラグイン
先日、「WordPressで任意のクエリをページ内で出力する方法 」という記事で ...