[PHP] cURLのPOSTでファイルアップロードする方法

cURLでのファイルアップロード方法が分からず試行錯誤してました。

色々と調べて$f = fopen($_FILES[$file_data]['tmp_name'], 'r');curl_setopt($conn, CURLOPT_INFILE, $f);で指定してみたりもしましたが上手くいきませんでした…。
もしかしたら別の環境では上手くいくのかしら…?

最終的に上手く動いてくれた方法の覚書です。

方法


// 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でも指定してやると上記のようになります。

twitterfacebookhatenafacebook