ちと、メモ的に。
IIS 7.0 上に WordPress 3.0 を入れた状態で、XML-RPC を使って投稿しようとすると、レスポンスが2バイト欠けます。
故に、
Response from server does not contain valid XML.
なるエラーが出ます。
XML-RPC.NET ライブラリを試しても、BlogWrite を試しても駄目なので、おそらく、IIS + PHP + wordpress の組み合わせが駄目です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <? xml version=”1.0″?> < methodResponse > < params > < param > < value > < array >< data > < value >< struct > < member >< name >isAdmin</ name >< value >< boolean >1</ boolean ></ value ></ member > < member >< name >url</ name >< value >< string >http://localhost/wp/</ string ></ value ></ member > < member >< name >blogid</ name >< value >< string >1</ string ></ value ></ member > < member >< name >blogName</ name >< value >< string >local blog</ string ></ value ></ member > < member >< name >xmlrpc</ name >< value >< string >http://localhost/wp/xmlrpc.php</ string ></ value ></ member > </ struct ></ value > </ data ></ array > </ value > </ param > </ params > </methodRespons |
こんな風に最後の2バイトが欠けます。おそらく、UTF-8 BOM の分だけ加算し忘れて、content-length が間違っているかと。
同じソースを動かしても、linux 上の wordpress は ok です。
ソース自体は、
.NET(C#)でXML-RPCを使ってブログに投稿する | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/1284
を参照。
エラーの回避方法は分からず。
環境としては、
- windows 7
- PHP 本家(MSのPHPではない)
- WordPress 本家(MSのPHPではない)
- IIS 7.0
ですね。他の組み合わせでは未定です。
~
追記 2010/09/14
解決法を見つけました。
wp-includes/class-IXR.php の 339 行目あたりに、XML-RPCのレスポンスを返しているので、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // Create the XML $xml = <<<EOD <methodResponse> <params> <param> <value> $resultxml </value> </param> </params> </methodResponse> EOD; // Send it $this ->output( $xml ); } |
のように、</methodResponse> の後ろに2バイト分、改行を増やしてやります。
本来はlengthを変えるところなのですが、乱暴ですが、これでIISでも動きます。
IISは鬼門だとゴーストが囁きます。
えぇ・・・囁きますとも。
ふふふ、伊達にWindows+IIS環境で過している訳ではありません。
解決方法を見つけましたぜッ!!!
WAMPを入れろと、ゴーストは囁きますがw
ピンバック: Live WriterでWordpressの既存記事の編集が出来ない件 | トトといっしょ。
ピンバック: WordPressでWindowsLiveWriterが使えない人は試してみるべき策 | WordPress技術情報 | 株式会社チョイスOKUDA