Как работать с XML-RPC на PHP. Простой пример.


Недавно мне понадобилось разобраться в том, как работать с XML-RPC на PHP, однако, оказалось, что внятную документацию на эту тему найти не так просто. После некоторого времени поисков, мне удалось-таки наскрести информации, достаточной для рабочего примера. Теперь хочу поделиться, надеюсь, кому-нибудь пригодится.
 
Ниже располагается код скриптов серверной и клиентской частей. Клиентская часть отправляет серверной данные, серверная часть сериализует эти данные и возвращает назад клиентской. Клиентская десериализует и выводит на экран. Фактически, получается своеобразное эхо, то есть, что отправил – то и получил назад. Сделано это просто для теста.
 
Рассмотрим код подробнее.
 
Скрипт-сервер:
 
<?php
 
/*
Функция-обработчик получаемых данных. $method_name – имя вызываемого метода, $params - параметры, $user_data – пользовательские данные. Подробнее – в документации к PHP.
*/

function local($method_name, $params, $user_data)
{
/*возвращаем сериализованные входящие данные*/
        return serialize($params);
}
 
/*создаем сервер*/
$s = xmlrpc_server_create();
 
/*регистрируем метод-обработчик*/
xmlrpc_server_register_method($s, 'external', 'local');
 
/*вызываем обработчик, передаем ему входящие данные, если обработчик возвращает что-то – выводим это на экран*/
if ($data = xmlrpc_server_call_method($s, $HTTP_RAW_POST_DATA, null))
        echo $data;
 
/*уничтожаем сервер*/
xmlrpc_server_destroy($s);
 
?>

Скрипт-клиент:
 
<?php
 
/*кодируем данные и имя метода для передачи серверу*/
$request = xmlrpc_encode_request('external', array(1, 2, 3));
 
/*создаем контекст для передачи данных серверу*/
$context = stream_context_create(array('http' => array(
    'method' => "POST",
    'header' => "Content-Type: text/xml",
    'content' => $request
)));
 
/*передаем запрос серверу и получаем ответ*/
$file = file_get_contents("http://адрес_сайта/скрипт_сервер.php", false, $context);
 
/*декодируем ответ*/
$response = xmlrpc_decode($file);
 
/*если ошибка – выводим ее, иначе – выводим ответ сервера*/
if (xmlrpc_is_fault($response)) {
    trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
} else {
    print_r(unserialize($response));
}
 
?>

Подробнее о параметрах для функций работы с XML-RPC можно узнать в документации к PHP.
Надеюсь, этот пример поможет вам понять принцип работы XML-RPC.


Добавить комментарий

Логин:
Пароль:
Проверочное число: