[PHP] cURLのPOSTでファイルアップロードする方法
1 min read
cURL でのファイルアップロード方法が分からず試行錯誤してました。
色々と調べて$f = fopen($_FILES[$file_data]['tmp_name'], 'r');
をcurl_setopt($conn, CURLOPT_INFILE, $f);
で指定してみたりもしましたが上手くいきませんでした…。
もしかしたら別の環境では上手くいくのかしら…?
最終的に上手く動いてくれた方法の覚書です。
方法
<?php
// API
$url = 'http://api-server/';
$tmpfile = $_FILES[$file_data]['tmp_name'];
$filename = $_FILES[$file_data]['name'];
$data = array(
'filedata_param' => '@' . $tmpfile . ';filename=' . $filename
);
$conn = curl_init();
curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($conn, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
curl_setopt($conn, CURLOPT_URL, $url);
curl_setopt($conn, CURLOPT_POST, true);
curl_setopt($conn, CURLOPT_POSTFIELDS, $data);
$res = curl_exec($conn);
curl_close($conn);
そもそも cURL でアップロードするファイルを指定する時はfile=@file.zip;type=application/x-zip-compressed
な感じで指定してやる必要があるわけで。
それと同じように PHP でも指定してやると上記のようになります。