1

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」とは正確には何を意味し、誰がエラーを生成しているのかということです。 それ以上の詳細/提案/洞察も大歓迎です!

4

3 に答える 3

2

@Novak: ご提案ありがとうございます。問題はメモリの問題であることが判明しました。リモートの場所からすべての投稿を取得すると、応答が PHP が使用できるメモリの量を超えたため、トークンが閉じられていないというエラーが発生しました。

不可解で不完全なエラー メッセージの問題は、使用されている XML-RPC ライブラリの古いバージョンが原因でした。WordPress のバージョンをアップグレードすると、メモリ エラーを含む完全なエラー出力が表示されました。

于 2008-09-23T19:20:34.267 に答える
0

Apacheにphp-xmlrpcモジュールをインストールするときにこのエラーを修正しました

php-xmlrpc.x86_64 : XML-RPC プロトコルを使用する PHP アプリケーション用のモジュール

于 2008-12-03T21:11:24.197 に答える
0

Expat は PHP の XML パーサーです。エラー コード 5 は、多くの expat エラー定数の 1 つです。この場合はXML_ERROR_UNCLOSED_TOKEN. RPC 呼び出しから返された結果にエラーがあるように思えます。file_get_contentsafterと beforeの RPCRequest でエラー チェックを実行したい場合がありますxmlrpc_decode

于 2008-09-19T17:48:47.657 に答える