WordPress XMLRPC: Expat сообщает об ошибке код 5 - PullRequest
0 голосов
/ 19 сентября 2008

Несколько месяцев назад я написал небольшое PHP приложение, которое использует WordPress XMLRPC library для синхронизации двух отдельных блогов WordPress. У меня есть общая функция «RPCRequest», которая упаковывает запрос, отправляет его и возвращает ответ сервера, и у меня есть несколько более конкретных функций, которые настраивают тип отправляемого запроса.

В этом конкретном случае я звоню "getPostIDs", чтобы получить количество сообщений на удаленном сервере и их соответствующие посты. Вот код:

$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 сообщений. Только недавно эта ошибка начала появляться.

Я попытался найти ошибку без особой удачи. Мой вопрос, таким образом, , что именно означает «код ошибки 5 отчетов об экспатах» и кто генерирует ошибку?

Ответы [ 3 ]

1 голос
/ 23 сентября 2008

@ Новак: Спасибо за ваше предложение. Проблема оказалась проблемой памяти; При получении всех сообщений из удаленного местоположения ответ превысил объем памяти, который PHP мог использовать, и, следовательно, произошла ошибка нераскрытого токена.

Проблема с загадочным и неполным сообщением об ошибке возникла из-за устаревшей версии используемой библиотеки XML-RPC. После того как я обновил версию WordPress, он предоставил мне полный вывод ошибок, включая ошибку памяти.

0 голосов
/ 04 декабря 2008

я исправил эту ошибку при установке модуля php-xmlrpc на apache

php-xmlrpc.x86_64: модуль для приложений PHP, использующих протокол XML-RPC

0 голосов
/ 19 сентября 2008

Expat - это анализатор XML в PHP. Код ошибки 5 является одной из многих констант ошибки экспата, в данном случае: XML_ERROR_UNCLOSED_TOKEN. Мне кажется, что в результате, возвращаемом из вызова RPC, есть ошибка. Возможно, вы захотите выполнить некоторую проверку ошибок в RPCRequest после file_get_contents и до xmlrpc_decode.

...