PHP
数か月前に、 を使用しWordPress XMLRPC library
て 2 つの個別の WordPress ブログを同期する小さなアプリケーションを作成しました。リクエストをパッケージ化して送信し、サーバーの応答を返す一般的な「RPCRequest」機能と、送信されるリクエストのタイプをカスタマイズする特定の機能がいくつかあります。
この特定のケースでは、「getPostIDs」を呼び出して、リモート サーバー上の投稿数とそれぞれの投稿 ID を取得しています。コードは次のとおりです。
$rpc = new WordRPC('http://mywordpressurl.com/xmlrpc.php', 'username', 'password');
$rpc->getPostIDs();
次のエラー メッセージが表示されます。
expat reports error code 5
description: Invalid document end
line: 1
column: 1
byte index: 0
total bytes: 0
data beginning 0 before byte index:
一種のクリフハンガー エンディングで、これも奇妙です。しかし、エラー メッセージは XML でフォーマットされていないため、リモート サーバーではなくローカルの XMLRPC ライブラリでエラーが発生していると直感的にわかります。
さらに奇妙なことに、「getPostIDs()」呼び出しを「getPostIDs(1)」またはその他の整数に変更すると、問題なく動作します。
WordRPC クラスのコードは次のとおりです。
public function __construct($url, $user, $pass) {
$this->url = $url;
$this->username = $user;
$this->password = $pass;
$id = $this->RPCRequest("blogger.getUserInfo",
array("null", $this->username, $this->password));
$this->blogID = $id['userid'];
}
public function RPCRequest($method, $params) {
$request = xmlrpc_encode_request($method, $params);
$context = stream_context_create(array('http' => array(
'method' => "POST",
'header' => "Content-Type: text/xml",
'content' => $request
)));
$file = file_get_contents($this->url, false, $context);
return xmlrpc_decode($file);
}
public function getPostIDs($num_posts = 0) {
return $this->RPCRequest("mt.getRecentPostTitles",
array($this->blogID, $this->username,
$this->password, $num_posts));
}
前述したように、「getPostIDs」に正の整数の引数を指定すると問題なく動作します。さらに、これはそのままで完全に機能していました。デフォルトのパラメータ 0 は、最新の投稿だけでなく、すべての$num_posts
投稿を取得する必要があることを RPC サーバーに示すだけです。このエラーが表示されるようになったのはごく最近のことです。
あまり運がなくても、エラーをグーグルで検索してみました。私の質問は、「expat reports error code 5」とは正確には何を意味し、誰がエラーを生成しているのかということです。 それ以上の詳細/提案/洞察も大歓迎です!