勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPで他サーバにFTP経由にてファイルをアップロードする方法

   2024/01/18  PHP

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にて指定した期間内の日付を1日ずつループで出力する方法
PHPにて指定した期間内の日付を1日ずつループで出力する方法

PHPにて開始日と終了日をユーザが入力すると、その期間内の日付をYYYY-MM- ...

FLASHから受信した画像をPHPで保存し、サムネイルも作る
FLASHから受信した画像をPHPで保存し、サムネイルも作る

■参考サイト ・FLASH http://www.ilovex.co.jp/bl ...

PHPでアクセスIPからランダム英数字のIDを作成
PHPでアクセスIPからランダム英数字のIDを作成

PHPで掲示板などにあるようなアクセスIPからランダム英数字のIDを作成したかっ ...

PHPで配列に特定の値が入っているか検索
PHPで配列に特定の値が入っているか検索

PHPで配列に特定の値が入っているか検索して trueかfalseを返したい、と ...

CodeIgniter4&Bootstrap&jQueryで簡易版お問い合わせページの作成
CodeIgniter4&Bootstrap&jQueryで簡易版お問い合わせページの作成

CodeIgniter4.4.4&Bootstrap&jQuer ...