【问题标题】:WordPress XMLRPC: Expat reports error code 5WordPress XMLRPC:Expat 报告错误代码 5
【发布时间】:2008-09-19 14:08:11
【问题描述】:

几个月前我写了一个小的PHP 应用程序,它使用WordPress XMLRPC library 来同步两个独立的WordPress 博客。我有一个通用的“RPCRequest”函数来打包请求、发送它并返回服务器响应,我还有几个更具体的函数可以自定义发送的请求类型。

在这种特殊情况下,我调用“getPostIDs”来检索远程服务器上的帖子数量及其各自的 postid。代码如下:

$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 只是向 RPC 服务器表明它应该检索 所有 个帖子,而不仅仅是最近的 $num_posts 帖子。直到最近才开始出现此错误。

我试过用谷歌搜索错误,但运气不佳。那么,我的问题是“expat 报告错误代码 5”究竟是什么意思,以及谁在产生错误?欢迎提供除此之外的任何细节/建议/见解!

【问题讨论】:

    标签: php blogs xml-rpc


    【解决方案1】:

    @Novak:感谢您的建议。问题原来是内存问题。通过从远程位置检索所有帖子,响应超出了 PHP 允许使用的内存量,因此出现未关闭令牌错误。

    神秘且不完整的错误消息的问题是由于使用了过时的 XML-RPC 库版本。一旦我升级了 WordPress 的版本,它就为我提供了完整的错误输出,包括内存错误。

    【讨论】:

      【解决方案2】:

      我修复了在 apache 上安装 php-xmlrpc 模块的这个错误

      php-xmlrpc.x86_64 : 使用 XML-RPC 协议的 PHP 应用程序模块

      【讨论】:

        【解决方案3】:

        Expat 是 PHP 中的 XML 解析器。错误代码 5 是许多 expat 错误常量之一,在本例中为:XML_ERROR_UNCLOSED_TOKEN。在我看来,从 RPC 调用返回的结果中有错误。您可能希望在file_get_contents 之后和xmlrpc_decode 之前在 RPCRequest 中进行一些错误检查。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-29
          • 2018-09-11
          • 1970-01-01
          • 2022-06-25
          • 2010-11-01
          相关资源
          最近更新 更多