PHP объединяет доступ к двум протоколам: XML-RPC и SOAP, оба из которых сосредоточены в расширении xmlrpc. Кроме того, в PHP PEAR, будь то PHP 4 или PHP 5, расширение XML-RPC интегрировано по умолчанию, и это расширение не имеет ничего общего с расширением xmlrpc и может независимо реализовывать взаимодействие по протоколу XML-RPC, если таковое имеется. не является расширением xmlrpc, рекомендуется использовать расширение PEAR::XML-RPC.
Введение в веб-службу
Веб-служба была создана для связи разнородных систем. Ее основная идея заключается в использовании удаленных вызовов HTTP на основе XML для обеспечения стандартного механизма, исключающего необходимость создания нового протокола. В настоящее время существует два стандарта протоколов для связи веб-сервисов: XML-RPC и SOAP. XML-RPC относительно прост и появился раньше, тогда как SOAP более сложен и в основном используется, когда требуются стабильность, надежность, безопасность и сложные взаимодействия.
Здесь мы в основном используем XML-RPC для краткого описания процесса взаимодействия веб-сервиса. Часть содержимого взята из руководства по PHP. Для получения более подробной информации рекомендуется обратиться к руководству.
Установите расширение xmlrpc.
Если расширение xmlrpc php не установлено в вашей системе, установите его правильно.
На платформе Windows сначала поместите расширение php_xmlrpc.dll в каталог установки PHP в каталог C:Windows или C:Winnt (расширение для PHP4 находится в каталоге C:phpextensions, а расширение для PHP5 находится в каталоге C:phpext) и удалите точку с запятой ";" перед расширением =php_xmlrpc.dll в C:Windowsphp.ini или C:Winntphp.ini, затем перезапустите веб-сервер. и проверьте phpinfo(). Существует ли проект XML-RPC, можно определить, правильно ли установлено расширение xmlrpc.
На платформе Unix/Linux, если расширение xmlrpc не установлено, перекомпилируйте PHP, добавьте параметр --with-xmlrpc при настройке, а затем проверьте phpinfo(), чтобы убедиться, что xmlrpc установлен нормально.
(Примечание. Следующие операции основаны на обычной установке расширения xmlrpc. Обязательно установите его правильно.)
Принцип работы XML-RPC
XML-RPC обычно означает, что весь процесс использует XML для связи. Сначала создается сервер RPC для обработки запросов, инкапсулированных в XML, передаваемых от клиента RPC, а результаты обработки возвращаются клиенту RPC в форме XML. Затем клиент анализирует XML для получения необходимых ему данных.
Серверная часть XML-RPC должна иметь готовые функции для вызова клиентом, а функции и методы в запросе, отправленном клиентом, должны быть согласованы с таковыми на серверной стороне, иначе требуемые результаты не будут получены.
Ниже я делаю простой код для описания всего процесса.
Практический сервер XML-RPC
использует функцию xmlrpc_server_create для создания сервера, затем регистрирует интерфейс вызова RPC, который необходимо предоставить, принимает POST-данные XML от клиента RPC, а затем обрабатывает их. Результаты обработки отображаются клиенту. в виде XML.
Код следующий: rpc_server.php
<?php
/**
* Функция: функция, предоставляемая для вызова клиентом RPC.
* Параметры:
* $method — это функция, которую должен вызвать клиент.
* $params — это массив параметров функции, которую необходимо вызвать клиенту.
* Возврат: вернуть указанный результат вызова.
*/
функция rpc_server_func($method, $params) {
$параметр = $параметры[0];
если ($параметр == "получить"){
$return = ''Эти данные получены методом get'';
}еще{
$return = ''Не указывать метод или параметры'';
}
вернуть $возврат;
}
//Создаем серверную часть XML-RPC
$xmlrpc_server = xmlrpc_server_create();
//Регистрируем метод rpc_server, вызываемый сервером, который фактически указывает на функцию rpc_server_func
xmlrpc_server_register_method($xmlrpc_server, "rpc_server", "rpc_server_func");
//Принимаем POST-данные XML от клиента
$request = $HTTP_RAW_POST_DATA
//Получаем результат выполнения после выполнения XML-запроса, вызывающего клиента;
$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
//Выводим результат XML после обработки функции.
заголовок(''Тип контента: текст/xml'');
echo $xmlrpc_response
//Уничтожить серверные ресурсы XML-RPC;
xmlrpc_server_destroy ($ xmlrpc_server);
?>
После создания серверной части давайте создадим наш RPC-клиент. Клиент обращается к порту 80 сервера XML-RPC примерно через Socket, затем инкапсулирует интерфейс RPC, который необходимо вызвать, в XML, отправляет его на сервер RPC через запрос POST и, наконец, получает результат, возвращаемый сервером.
Код следующий: rpc_client.php
<?php
/**
* Функция: функция, предоставляемая клиенту для подключения к серверу XML-RPC.
* Параметры:
* $host Хост, к которому необходимо подключиться.
* $port порт для подключения к хосту
* $rpc_server XML-RPC-файл на стороне сервера.
* $request инкапсулирует информацию о запросе XML
* Возврат: если соединение установлено успешно, будет возвращена информация XML, возвращенная сервером. Если соединение успешное, он вернет false.
*/
function rpc_client_call($host, $port, $rpc_server, $request) {
//Открываем указанный сервер
$fp = fsockopen($host, $port);
//Создаем информацию запроса POST для сервера XML-RPC, с которым необходимо связаться.
$query = "POST $rpc_server HTTP/1.0nUser_Agent: XML-RPC ClientnХост: ".$host".nContent-Type: text/xmlnContent-Length: ".strlen($request)."n n".$request."n";
//Отправляем созданный протокол HTTP на сервер и возвращаем false в случае сбоя.
if (!fputs($fp, $query, strlen($query))) {
$errstr = "Ошибка записи";
вернуть ложь;
}
//Получаем всю информацию, возвращаемую с сервера, включая заголовки HTTP и информацию XML
$contents = '''';
в то время как (!feof($fp)){
$contents .= fgets($fp);
}
//Вернем полученный контент после закрытия ресурса подключения
fclose($fp);
вернуть $содержание;
}
//Создаем информацию для подключения к серверу RPC
$host = ''локальный хост'';
$порт = 80;
$rpc_server = ''/~heiyeluren/rpc_server.php'';
//Закодируйте XML-запрос, который необходимо отправить, в XML. Необходимо вызвать метод rpc_server и параметр get.
$request = xmlrpc_encode_request(''rpc_server'', ''get'');
//Вызов функции rpc_client_call для отправки всех запросов на сервер XML-RPC и получения информации
$response = rpc_client_call($host, $port, $rpc_server, $request
//Анализируем XML, возвращенный с сервера, удаляем информацию из заголовка HTTP и преобразуем XML в строку, распознаваемую PHP
);
$split = ''<?xml version="1.0"coding="iso-8859-1"?>'';
$xml = взорваться ($split, $response);
$xml = $split .array_pop($xml);
$response = xmlrpc_decode($xml);
//Выводим информацию, полученную от RPC-сервера.
print_r ($ ответ);
?>
Грубо говоря, в приведенном выше примере необходимо отправить метод rpc_server с параметром get и затем получить результат от сервера. XML-данные, возвращаемые сервером:
<?xml version="1.0"coding=". iso-8859-1 "?>
<ответ метода>
<параметры>
<параметр>
<значение>
<string>Эти данные получены методом get</string>
</значение>
</парам>
</парамсы>
</methodResponse>
Затем мы кодируем этот XML в строку PHP с помощью функции xmlrpc_decode и можем обрабатывать его по своему желанию, и все взаимодействие с веб-службой завершается.
Заключение
Будь то XML-RPC или SOAP, если он позволяет нам стабильно и безопасно выполнять удаленные вызовы процессов и завершать наш проект, тогда весь веб-сервис будет успешным. Кроме того, если возможно, вы также можете попробовать использовать XML-RPC в PEAR для реализации аналогичных операций, описанных выше. Это может быть проще и удобнее для вас.
Просто используйте XML-RPC для взаимодействия с веб-сервисом. Некоторые коды см. в руководстве по PHP. Если вы хотите получить подробную информацию, рекомендуется обратиться к руководству. Если статья неверна, поправьте меня.
Эта статья взята из исходной ссылки на информацию о PHP: http://www.phpchina.com/html/84/n-33884.html.