勉強したことのメモ

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

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

   2024/01/18  PHP

formで画像を送信した後、他サーバにファイルをアップロードしたかった。以前はPHPのFTP関数を用いる方法を使ったけど、今回の環境では上手く動かなかった。HTTPで送信する方法を調べたのでメモ。

 

ソースコード

送信側

foreach( $_FILES as $key => $val ){
    if( !$val['size'] ){
        continue;
    }
    $data = array(
        'file'=>'@'.$_FILES[$key]['tmp_name'].';filename='.$_FILES[$key]['name'].';type='.$val['type'], 
        'key' => $key, 
        'id' => $id,
    ); //file以外にkeyやidなども配列に入れて送信できる
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_URL, 'http://hogehoge.com/receive.php'); //受取側のURL指定
    $result = curl_exec($ch);
    curl_close($ch);
}

受信側

$img_name = imgUpload($_FILES);
function imgUpload( $img_list = array() ){
    if( empty($img_list) ){
        return false;
    }
    foreach( $img_list as $key => $val ){
        $ext = $val['type'];
        if ($ext == 'image/jpeg' || $ext == 'image/jpg') {
            $tmp_ext = '.jpg';
        } elseif ($ext == 'image/png') {
            $tmp_ext = '.png';
        } elseif ($ext == 'image/gif') {
            $tmp_ext = '.gif';
        } else {
            return false;
        }
        $tmp_name = md5(uniqid(rand(), true)) . $tmp_ext;
        if( !move_uploaded_file($val['tmp_name'], $img_path . $tmp_name) ){
            return false;
        }
        $return[$key]['url'] = $tmp_name;
    }
    return $return;
}

 

その他

まとめてアップロードできたらいいんだけど、方法が分からなかったので今回は1枚ずつアップロードした。

 - PHP

  関連記事

PHPにてSVGファイルをjpg / png画像に変換する方法

PHPにてSVGファイルをjpgもしくはpng形式の画像ファイルに変換したいとい ...

PHP8系で関数の引数が設定しやすくなる名前付き引数について

PHP8系で名前付き引数が導入されたということを最近知った。今までは「第〇引数」 ...

メモリキャッシュシステムであるMemcachedをPHPにて利用する方法

メモリキャッシュシステムであるMemcachedのインストール方法、IP制限、P ...

PHPでjpg / png画像をAVIF形式の画像に変換する方法

PHPでjpg / png画像をAVIF形式の画像に変換しサーバに保存したい。W ...

PHP8系で追加されたJIT(Just-In-Time)の設定方法

PHP8系でOPcacheの拡張機能としてJIT(Just-In-Time)とい ...