PHP7 上に WordPress を入れたときは php-xmlrpc を有効にする

タイトル通りですが、半日ほどハマったのでメモ書き

WordPress から XML-RPC を使って投稿するとエラーになる

以前、作っていた WpPost https://github.com/moonmile/WpPost を markdown に対応しようかと思って、新しく建てた openccpm.com につなげようとすると、エラーになりました。このブログ moonmile.net/blog は XML-RPC で投稿できているので大丈夫なんですが、なぜか新しく立てたほうにはできない。

試しに Open Live Writer を使ってつなげようとするも、アカウント作成のときや URL を指定するときに「parse error. not well formed」と出て「-32700」なエラーコードが返されます。どうやら、送っている XML のフォーマットがダメということなんですが、どういう風にダメなのか分からず。

試しに WordPress の英語版を入れたりバージョンを変えたりしてみたのですが、XML-RPC 経由で投稿できない、なぜ?最近の WordPress は XML-RPC が初期値で有効になっているはずなのに。

PHP7 の初期値では XML-RPC が有効になっていない

WordPress 側のコード(class-IXR-message.php や class-IXR-server.php)にログを入れつつ確認していったところ原因が分かりました。

apache2 + PHP7 を入れているときに、PHP 拡張の XML-RPC が初期値では有効になっていません。このために、IXR_Message::parse() でエラーになっているらしいですね。xml_parser_create が呼び出せないようです。

openccpm.com は Ubuntu 上で動いているので、

sudo apt-get install php-xml php-xmlrpc

でインストールした後に、/etc/php/7.0/apache2/php.ini を開いて

extension=php_xmlrpc.dll

のように XML-RPC を有効にします。

すると、以下のように mt.supportedMethods で有効なメソッド一覧などが取れるようになります。

カテゴリー: 開発 パーマリンク