勉強したことのメモ

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

  関連記事

htmlspecialcharsを通してMySQLに格納したものを元に戻して出力

MySQLにHTMLタグを入れたくない場合にhtmlspecialcharsを使 ...

PHP7が2015年11月にリリースされるらしい

PHP7で変わること ——言語仕様とエンジンの改善ポイント from Yoshi ...

PHPで複数の画像やテキストファイルをzipファイルとしてダウンロードさせる方法

PHPで画像ファイルやテキストファイルをzip圧縮して、ダウンロードさせたかった ...

PHPで縦横どちらかが指定の長さを超えた場合、比率を保ったままリサイズ

PHPで縦横どちらかが指定の長さを超えた場合、 比率を保ったままリサイズしたかっ ...

CodeIgniter4 & jQueryを用いて同一サイト内でajax通信する方法

CodeIgniter4.4.4 & jQueryを用いて同一サイト内で ...