WordPressにXML-RPC経由でサイズの大きなファイルを送信する際にパースエラーが発生した場合の対処法
最近Compact Framework用XML-RPCクライアントライブラリを書いているのですが、WordPress XML-RPC APIのwp.uploadFileメソッドを使ってファイルを送信しようとした場合、パースエラーが発生する現象に悩まされました。ファイルが小さい場合は問題がないのですが、ファイルのサイズが大きくなるとパースエラーを返すという現象です。
調べてみたところ、WordPressのXML-RPC関係の処理を担っているIncutio XML-RPC Library for PHPがどうやら問題の原因のようで、class-IXR.php(wp-includes以下にあります)で定義されているIXR_Messageクラスのparseメソッドのところでエラーが返されているようです。
function parse() {
// first remove the XML declaration
$this->message = preg_replace('/<?xml(.*)??'.'>/', '', $this->message);
if (trim($this->message) == '') {
return false;
}
//以下省略
どうもエラーが起きる場合は157行目を境に$this->messageの内容が空になっているようで、それが原因で159行目でreturn falseされてしまっているようです。なぜファイルが大きい場合だけそのようなことになるのかはちょっとよく分からないのですが(不適切な正規表現なのでしょうか?)、とりあえずPOSTするXMLからXML宣言を削除し、methodCall要素以下だけのXMLフラグメントとして送信するようにしたところ上手くいくようになりました。参考まで。
追記:
Related Entries
Trackbacks : 1
- Trackback URL for this entry
- http://blog.sharplab.net/computer/cprograming/xml-rpcclib/1281/trackback/
Listed below are links to weblogs that reference this entry
- ピンバック from WP-XMLRPCのパースエラーのデモンストレーション用コード - SharpLab. 08-10-19 23:46:16 JST
-
[...] すが…。.Net Compact Frameworkと.Net Frameworkの関係がいまいち分からない。 WordPressにXML-RPC経由でサイズの大きなファイルを送信する際にパースエラーが発生した場合の対処法 [...]
Fennec