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のプログラム内で数値のプラスとマイナスを反転させたい。以下に対応方法をメモ ...
-
-
PHPで「php-qrcode-detector-decoder」ライブラリを使用してQRコードをデコードする方法
PHPでQRコードの画像をデコードし、値を変数等に格納したい。何とかならないか調 ...
-
-
メモリキャッシュシステムであるMemcachedをPHPにて利用する方法
メモリキャッシュシステムであるMemcachedのインストール方法、IP制限、P ...
-
-
JavaScript / PHPにて「lz-string」を用いてデータの圧縮・展開する方法
文字数が多いGETパラメータを送信したいというケースがあった。また、送信側はJa ...
-
-
PHPにてmicrotimeで秒数を測定した際「xxxxxE-5」のような値になる場合の対応方法
PHPで過去記事を参考の上、あるプログラムの処理にかかった時間を測定しようとした ...