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