T

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での動作も問題なし。なんでだ!?

Posted by on 5月 7, 2007 in PHP, Tuit, WordPress

Comments

  • kwi より:

    php5.2.2のバグらしいです。5.2.3では直すようです。
    http://marc.info/?l=php-dev&m=117856296204233&w=2

  • admin より:

    切ないですね…

  • コメントを残す