WordPress XMLRPC: Expat relatórios código de erro 5
Pergunta
Eu escrevi uma pequena aplicação PHP
há vários meses que usa o WordPress XMLRPC library
para sincronizar dois blogs WordPress separadas. Eu tenho uma função geral "RPCRequest" que os pacotes do pedido, envia e retorna a resposta do servidor, e eu tenho várias funções mais específicas que personalizam o tipo de solicitação que é enviada.
Neste caso particular, eu estou chamando "getPostIDs" para recuperar o número de mensagens no servidor remoto e as respectivas postids. Aqui está o código:
$rpc = new WordRPC('http://mywordpressurl.com/xmlrpc.php', 'username', 'password');
$rpc->getPostIDs();
Estou recebendo a seguinte mensagem de erro:
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:
Uma espécie de final momento de angústia, que também é estranho. Mas desde que a mensagem de erro não está formatado em XML, a minha intuição é que é a biblioteca XMLRPC local que está gerando o erro, não o servidor remoto.
Ainda mais estranho, se eu mudar os "getPostIDs ()" chamada de "getPostIDs (1)" ou qualquer outro inteiro, ele funciona muito bem.
Aqui está o código para a classe 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));
}
Como eu mencionei, ele funciona bem se "getPostIDs" é dado um argumento inteiro positivo. Além disso, este utilizado para funcionar perfeitamente bem como é; o parâmetro padrão de 0 indica simplesmente ao servidor RPC que ele deve recuperar todas mensagens, não apenas as mensagens $num_posts
mais recente. Só recentemente esse erro começou a aparecer.
Eu tentei googling o erro sem muita sorte. A minha pergunta, então, é O que exatamente significa "relatórios de expatriados código de erro 5" média, e que está gerando o erro? Qualquer detalhe / sugestões / idéias para além de que é bem-vindo, também!
Solução
@Novak: Obrigado por sua sugestão. O problema acabou por ser um problema de memória; recuperando todas as mensagens a partir do local remoto, a resposta excedeu a quantidade de memória PHP foi autorizado a utilizar, daí o erro de token não fechado.
O problema com a mensagem de erro enigmática e incompleta foi devido a uma versão desatualizada da biblioteca XML-RPC sendo usado. Uma vez que eu tinha atualizado a versão do WordPress, ele forneceu-me com a saída de erro completo, incluindo o erro de memória.
Outras dicas
i corrigido este erro ao instalar módulo php-xmlrpc no Apache
php-xmlrpc.x86_64: Um módulo para aplicações PHP que usam o protocolo XML-RPC
Expat é o parser XML em PHP. código de erro 5 é uma das muitas constantes de erro expatriados, neste caso: XML_ERROR_UNCLOSED_TOKEN
. Parece-me que há um erro no resultado retornado da chamada RPC. Você pode querer fazer alguma verificação de erros em RPCRequest após file_get_contents
e antes xmlrpc_decode
.