XML-RPCのエラー修正
オフラインエディタでこの日記を編集しようとしたら、WordPress側のXML-RPCサーバからの応答が
「XML-RPC server accepts POST requests only.」
になっているので調べてみたが、どうやらGLOBAL変数が正しく受け取れないようになっているのが原因らしい。wp-includes/class-IXR.phpに上のエラーメッセージが書かれていたので見てみると、こんなコードになっていた。
if (!$data) { global $HTTP_RAW_POST_DATA; if (!$HTTP_RAW_POST_DATA) { die('XML-RPC server accepts POST requests only.'); } $data = $HTTP_RAW_POST_DATA; }
理由はわからないが、ここでdieしないように
$HTTP_RAW_POST_DATA = file_get_contents(“php://input”);
これを追記して
if (!$data) { global $HTTP_RAW_POST_DATA; if (!$HTTP_RAW_POST_DATA) { $HTTP_RAW_POST_DATA = file_get_contents("php://input"); if(!$HTTP_RAW_POST_DATA){ die('XML-RPC server accepts POST requests only.'); } } $data = $HTTP_RAW_POST_DATA; }
ちょっとしつこくしてみたら動いた。ectoでの動作も問題なし。なんでだ!?
Comments
php5.2.2のバグらしいです。5.2.3では直すようです。
http://marc.info/?l=php-dev&m=117856296204233&w=2
切ないですね…
[…] PHP5.2.2でHTTP_RAW_POST_DATAにアクセスできず http://selfkleptomaniac.org/archives/170 […]