WordPressでWindowsLiveWriterが使えない人は試してみるべき10の策

wordpressでブログを運用してますが、エディタを使ってみたくて、 ていうか
超!使いたくてwindows live writerをインストールしてみました。

で、立ち上げるとブログの設定画面になりますがURLやユーザ・PWを入れると即効以下のポップアップが出ます。

ブログへの接続中にエラーが発生しました。
サーバーへの応答が無効です - ブログサーバーから受信した blogger.getUsersBlogs メソッドへの応答が無効です。
invalid response document returned from xmlrpc server
このエラーを修正してから処理を続けてください。

で、結局このポップアップ画面を抹殺するために試行錯誤したっていう話です。
google先生にあの手この手で質問を投げて色んな解決法をさぐりましたが、とにかく自分の環境では何をやれどもダメだったんですが見事に10個目で成功

せっかくなので試した10策をまとめておきます。

ちなみに環境はこんな感じ
CentOS 6.3
nginx 1.0.15
PHP 5.3.14
WordPress 3.5.1

その1:wordpressにログインして、XMLPRCの投稿を許可に設定する

まずひっかかったのがコレ。 何はともあれこの許可設定をしようね~ みたいな記事が散見される。
ところがwordpress3以降はデフォで許可になってるとの事。 意味なし

はい次。

その2:プラグインのControl XML-RPC publishingをインストールする

海外のどっかのQAサイトかな、載ってたのが。 英語読めないんだけど果敢にチャレンジしてみた。
これは、説明を見ると「 Add The ability to enable and disable XML-RPC from admin
と書いてあるので少し期待してみたが、有効化しても全然ダメでした。

次いきます。

その3:プラグインを片っ端から停止させて検証していく

これも、海外のアニキの投稿で書いてあった気がする。全部英語だったから(私のTOEICの点数は悲惨なので)こんな感じだろうと思われる解決策っぽい。
プラグインを一個ずつ停止させて有効化させて ってやりながら試すらしい。 めんどくせー!!笑

19個プラグインいれてるから19回停止して、live writerでPOSTを飛ばしてみたです。
で、最初から期待してなかったけど効果なし

つーわけで、もうサーバーにログインして手術をする事に。。
ここまでで解決されてない人は覚悟すべし

その4:memory_limitの設定を変更する

海外サイトの古い情報からひっぱってきた。

どうも、人によってはWordPressがメモリを食い尽くしててXML-RPC通信をする余裕がない
みたいな、いや、ちょっと違うかもしれないけど そんなような記事が散見された。

まずXML-RPCというプロトコルでブログエディタがWordPressに記事を投稿するっていう事事態ここで始めて知る。
無知とは恐ろしいものよ。

確認の仕方は簡単で、php.iniのmemory_limitの値を確認して少なくなっていれば
上限値を上げればいいだけ。
32Mとか64Mとかの人はサーバで使えるメモリサイズとご相談して128MにUPすれば
いいらしい。
けど、自分の場合は既に128Mだった。 ナウいサーバ環境の人はみんな128じゃないのかな。。
意味なし。

※php.iniとかのファイルがどこにあるのか良くわからない人は(そんな人はWordPress使ってない気もしますが。。)プラグインWordPressSystemHealth で簡単に確認できる。
インストールして有効化するだけ、 ダッシュボードに行って下のほうにスクロールすれば
見れます。 解決してないけど、これはこれで面白かった。
スクリーンショット_062113_112106_PM

なにこのロードアベレージw

その5:wpのルート下にある xmlrpc.php のソースを編集する

PHPのバグの関連で、以下のコードを書いたら解決したよっていう記事があった。

if ( !isset( $HTTP_RAW_POST_DATA ) ) {
$HTTP_RAW_POST_DATA = file_get_contents( 'php://input' );
 }

けど、こんなもんとっくの昔に実装済みだったようでファイル開いたら真っ先に書かれてた。
php5.2.2以前のPHPでしか意味ないそう。 無駄足だったぜ。

その6:wp-includes/class-wp-xmlrpc-server.phpに手を入れる

4338行目あたりにあったこれをコメントアウト
if ( strpos( $post_content, $file->guid ) !== false )

これで結構いけるっていう人が多かったので期待していた。
いけた人はなんで行けたのだろう。 PHPのソースを追う気になれなかったのでこれ以上は調べていない。
できた人はおめでとうございます。
私はもちろんダメですたよ。
マジ萎えるんですけどwww

その7: live writerのアカウント設定で文字コードをUTF8にする

みなさん、結構投稿をする際にエラー出て これで解決されているみたいですね。
けど、私まだlive writerの初期設定画面から進めないので文字コードの変更どころか
アプリの画面すら拝めてません。 できません。

ただ、そうはいってもUTF8つかってのかいな? と思ってxmlrpc.phpの上の方で
WindoesLiveWriterがサーバー側に投げてるPOSTデータをそのまま適当に出力してみた。
すると一応XMLでUTF8を宣言している事はわかった。 ふむふむ。 解決してないけど安心した。

その8:nginxが勝手にキャッシュしてんじゃねーだろうな

そもそもnginxのconfigで悪い設定になっていないか見る。
正直、このブログでしか使ってないので設定とか慣れてない分もあり、ここは疑ってもよさそう。
xmlrpc.phpがちゃんとProxyキャッシュになっていないか確認。
結果:なっていませんでした 終了

その9:全てのerrorログとアクセスログを見まくる

いや、まぁエラーログは最初からみてるんですが、アクセスログを何回みても200OK返してるんですよね。。
PHPとかがこっそり裏でエラーはいてないか確認しようという。
nginxのaccessログ、errorログ、8080のアクセス・エラー両方、あとPHPのエラーログ、php-fpmのエラーログ 全部チェック
もちろんwordpressのDEBUGログも出力ONにする。(wp-config.phpでtrueにdefineする)

結果:特に異常なし(爆)
もうこれは詰んだ!と思ったね!

その10:<解決!> windows live writerのログも見てみる

途方に暮れていた俺は、そもそもXML-PCRなるプロトコルでサーバはなんて返したら正解なのよ?
っていうすごく基本的な事に興味を持つ(←遅い)

ブラウザ経由で通信していないので、データのやり取りを覗き見しようとするとめんどくさいですよね。
TCPDumpとか最近つかってないしな。 とか、おもいつつも

LiveWriterってログ出力してないのだろうか・・? という疑問をもつ。

ログ出力してございますよ。奥さん。

⇒XPの場合はログはここで発掘
C:\Documents and Settings\USERNAME\Application Data\Windows Live Writer
⇒win7の場合はここ
C:\Users\USERNAME\AppData\Local\Windows Live Writer

※AppDataディレクトリが隠しディレクトリになってたので、コンパネから隠しファイルも全て表示するように変更しよう

そんでフォルダの中に”Windows Live Writer.log”っていうファイルがあったので、テキストエディタで開いてみた。
windowsアプリは作ったこともないし、何が書いてあるのかサッパリだったのだがサーバから帰ってくるXMLに関しての情報はないか探ってみた。

あった。

自分の場合は以下のXMLの証跡が残っていた。サーバはこれをクライアントに返してるにちげーねぇぜ。

<?xml version=""1.0"" encoding=""UTF-8""?>
<methodResponse>
  <params>
    <param>
      <value>
      <array><data>
        <value><struct>
          (略)
        </struct></value>
       </data></array>
      </value>
    </param>
  </params>
</methodResponse",""

よく見てみると、なんか最後の methodResponseの閉じタグおかしくねーか?

ぜったいおかしーだろ!これ!
と思って調べてみると同じような人が何人かいた。 日本にも海外にも。
けど、なんかIIS+PHP+WordPressで発生してるらしい。

ちょっと閉じタグの挙動は違うが、Nginxでも発生したようである。

WPのソース編集という手段になってしまうが、 wp-includes/class-IXR.php のヒアドキュメントをいじると治る。
http://www.moonmile.net/blog/archives/1400
このブログを参考にした。

修正方法はシンプル。 どうもNginxがレスポンスするときに数バイトミスるらしいので、class-IXR.phpの中でヒアドキュメントを使っている箇所があれば全部空の行を追加してやる。なにこの男気改修。 WPのUPDATEするの怖いです。

EODでソース内を検索し。

 $xml = <<<EOD
<methodResponse>
  <params>
    <param>
      <value>
      $resultxml
      </value>
    </param>
  </params>
</methodResponse>

EOD;


こうなってる箇所を

 $xml = <<<EOD
<methodResponse>
  <params>
    <param>
      <value>
      $resultxml
      </value>
    </param>
  </params>
</methodResponse>





EOD;


こうした。 EODを使ってる箇所が3箇所くらいあったので、念のため全部空行いれてみた。(適当に3つくらい入れた)

通りました!!

ittaze

地味にうれしい。。。。
今回はハマった。 計5時間以上ハマったから。

というわけで、Nginxを使ってる人は注意なのかも。
ある意味ソースを書き換えなくてもWebサーバをApacheに変更してしまうっていう手もあるか。
それかNginxをバージョンアップすれば治ったりする?

おわり

2013-07-03 | Posted in Word Press1 Comment » 


関連記事

コメント1件

 かふぇ | 2014.07.21 9:32

ありがとうございました!
先日より、windowsに問題があるといって停止してUPできなかったのですが、おかげさまで10番目の方法で無事UPできるようになりました。
お礼まで~♪

Comment





Comment



*