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”到底意味着什么,以及谁在生成错误?除此之外的任何细节/建议/见解也是受欢迎的!
答案 0 :(得分:1)
@Novak:谢谢你的建议。问题原来是一个记忆问题;通过检索远程位置的所有帖子,响应超出了PHP允许使用的内存量,因此未关闭的令牌错误。
隐藏和不完整的错误消息的问题是由于使用的XML-RPC库的过时版本。一旦我升级了WordPress的版本,它就为我提供了完整的错误输出,包括内存错误。
答案 1 :(得分:0)
Expat是PHP中的XML解析器。错误代码5是许多expat错误常量之一,在本例中为XML_ERROR_UNCLOSED_TOKEN
。听起来像RPC调用返回的结果有错误。您可能希望在file_get_contents
之后和xmlrpc_decode
之前在RPCRequest中执行一些错误检查。
答案 2 :(得分:0)
我修复了在apache上安装php-xmlrpc模块的错误
php-xmlrpc.x86_64:使用XML-RPC协议的PHP应用程序模块