勉強したことのメモ

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で他サーバにFTP経由にてファイルをアップロードする方法

formで送信した内容をチェックした上で、他サーバにファイルをアップロードしたか ...

他サーバーにある画像をPHPで取得して保存する方法

他サーバーにある画像をURLで指定して、PHPで取得して保存する方法のメモ。 フ ...

Mailtrap & PHPMailerでメールサーバ無しの環境でもメール送信テストを行う方法

開発環境等メールサーバが無い環境でメール送信テストを行う際にMailtrapとい ...

CodeIgniter4でCronを実行する方法

CodeIgniter4.4.4で特定の処理をCronで自動実行させたい。以下に ...

PHPでのend~~について

endforとかendifとか使いたかったけど、構文の書き方が 分からなかったの ...