PEAR_HTTPからcurlへの置き換え

 xubuntuを21.04から21.10にアップグレードしたら、はてなフォトライフへのアップロードスクリプトが動かなくなった。エラーメッセージを見ると、21.10で採用されたphp8では配列で{}が使えなくなったためらしい。
 php8に対応したpearがあるはずと思っていろいろ試したが、芳しくない。それではとエラーが出るたびに手動で{}を[]に書き換えてphp側のエラーが出ないようにはなったが、はてなフォトライフからのレスポンスが返ってこない。

 やっぱりphp本体に持っているファンクションのほうがいいなと思って、file_get_contentsでの実装を検討。でもpostメソッドで&や=でつなげたクエリ文字列を送る場合と、「データを送る」という場合の違いがよくわかっていない。酒を飲んでいたのでいったん就寝。床にいったところで「jsonのpostが参考になるんちゃう?実例も多いはずやし」と思いついた。

 明けて今朝。いろいろ「php post json」で検索してみる。
qooga.jb-jk.net
 ほう、そんなに速度が違うのか。ではなじみの薄いcurlでやってみるか。意外とうまくいった。

<?php
$curl = curl_init($post_url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("X-WSSE: $wsse_header"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$res_body = curl_exec($curl);
curl_close($curl);

#PEAR_HTTPでのコード
/*
	$request = new HTTP_Request($post_url);
	$request->setMethod(HTTP_REQUEST_METHOD_POST);
	$request->addHeader('X-WSSE', $wsse_header);
	$request->setBody($post_data);

	if (PEAR::isError($request->sendRequest())) {
	    die('request failed');
	}

	$res_code = $request->getResponseCode();
	$res_body = $request->getResponseBody();
*/
?>

 できた。これで泥は着てても Ver. 2.0の更新もできる。