2008-09-19 5 views
0

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

В данном конкретном случае я вызываю «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 сообщений. Только недавно эта ошибка начала появляться.

Я пробовал ошибиться без ошибок. Итак, мой вопрос: Что означает «expat reports error code 5», и кто генерирует ошибку? Любые детали/предложения/идеи, выходящие за рамки этого, тоже приветствуются!

ответ

1

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

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

+0

Рад, что ты понял это! – Novaktually 2008-09-29 16:45:06

0

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

0

я исправила эту ошибку установки модуля PHP-XmlRpc на апача

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

 Смежные вопросы

  • Нет связанных вопросов^_^