PHPで、あるAPI操作プログラムを作成している。

CURL関数を使ってAPIを叩く仕様なのだが、バイナリデータをPUT送信する処理を書くのに時間がかかったので、備忘録としてまとめておく。

コード全文

$url = 'APIのURL';
$method = "PUT";
$headers = [
  "Content-Type: application/octet-stream",
];

$filePath = './hogehoge.jpg';
$file = fopen($filePath, 'rb');

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_UPLOAD => true,
  CURLOPT_URL => $url,
  CURLOPT_CUSTOMREQUEST => $method,
  CURLOPT_HTTPHEADER => $headers,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_BINARYTRANSFER => true,
  CURLOPT_INFILE => $file,
  CURLOPT_INFILESIZE => filesize($filePath),
]);

$response = curl_exec($curl);
curl_close($curl);

$result = json_decode($response, true);
return $result;

バイナリデータを扱うため、fopen関数を使う必要がある。

その他、CURLのオプションについてはcurl_setopt_array関数を使ってまとめている。

コード実行後の変数$resultには、APIのJSON形式レスポンスが配列化されたものが入る。