Вы хотите быть XML-RPC-клиентом и посылать запросы на сервер. XML-RPC позволяет PHP осуществлять вызовы функций на веб-сервере, даже если они не используют PHP. Затем полученные данные автоматически конвертируются в переменные PHP для использования в вашем приложении.
Используйте встроенное в PHP расширение ML-RPC с некоторыми
вспомогательными функциями. Что касается версии PHP 4.1, то она
поставляется с расширением xmlrpc-epi. К сожалению, расширение
xmlrpc-epi не имеет «родных» C-функций, принимающих форматированную строку XML-RPC и посылающих запрос. Единственным используемым в данном случае файлом является файл utils.php, который располагается в каталоге
sample/utils. Для инсталляции этого файла просто скопируйте его
в каталог, входящий в include_path, чтобы PHP смог найти этот файл.
Ниже приведен код клиентской программы, вызывающий функцию
на сервере XML-RPC, который возвращает названия штатов:
// это имя файла по умолчанию из пакета, хранящееся
// здесь, чтобы избежать путаницы в имени файла
require 'utils.php';
// параметры сервера
$host = 'betty.userland.com';
$port = 80;
$uri = '/RPC2';
// параметры запроса:
// передаем число из диапазона 1-50.
// в ответ получаем n-й штат в алфавитном порядке,
// где 1 это Alabama, 50 это Wyoming и т.п.
$method = 'examples.getStateName';
$args = array(32); // передаваемые данные
// строим из этих переменных массив
$request = compact('host', 'port', 'uri', 'method', 'args');
// эта функция создает соответствующий XML-RPC запрос
$result = xu_rpc_http_concise($request);
print "I love $result!\n";
XML-RPC – формат, созданный фирмой Userland Software, позволяет
посылать запросы веб-серверу с помощью протокола HTTP. Сам запрос
представляет собой ML-документ, отформатированный особым образом. В качестве клиента вы строите посылаемый XML-запрос, который
должен удовлетворять спецификации XML-RPC. Затем вы посылаете
его на сервер, а сервер отвечает вам XML-документом. Для извлечения
результатов необходимо проанализировать полученный XML-документ. Сервер XML-RPC в разделе «Решение» возвращает название штата, поэтому программа печатает:
love New York!
В отличие от более ранних реализаций XML-RPC, которые были запрограммированы на PHP, текущая версия встроенного расширения аписана на C, и обработка с ее помощью выполняется значительно
быстрее. Чтобы подключить это расширение, добавьте при конфигурировании PHP параметр --with-xmlrpc.
Параметры сервера указывают PHP, какому серверу посылать запрос.
Переменная $host – это имя хоста сервера; переменная $port обозначает
порт, через который работает веб-сервер, обычно это порт с номером 80; переменная $uri – это относительный путь к серверу XML-RPC, с которым нужно соединиться. Если порт не указан, функция по умолчанию обращается к порту 80, а в качестве URI по умолчанию берется
корневой каталог веб-сервера /.
Параметрами запроса являются имя вызываемой функции и данные,
которые ей передаются. Так, метод examples.getStateName принимает
целое число из диапазона от 1 до 50 и возвращает соответствующее название американского штата в алфавитном порядке. В XML-RPC имена методов могут включать точку, а в PHP нет. Если бы это было так,
то PHP-эквивалентом передачи числа 32 в качестве аргумента при вызове метода XML-RPC examples.getStateName был бы вызов функции examples.getStateName():
examples.getStateName(32);
В XML-RPC это выглядит следующим образом:
<?xml version='1.0' encoding="iso-8859-1" ?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value>
<int>32</int>
</value>
</param>
</params>
</methodCall>
Параметры сервера и информация запроса заносятся в единый ассоциативный массив, который передается функции xu_rpc_http_concise().Для сокращения записи выполняется вызов функции compact(), который идентичен следующему:
$request = array('host' => $host,
'port' => $port,
'uri' => $uri,
'method' => $method,
'args' => $args);
Функция xu_rpc_http_concise() выполняет вызов XML-RPC и возвращает результаты. Поскольку возвращенное значение является строкой, можно непосредственно вывести переменную $results. Если же
наш XML-RPC-вызов возвращает множество значений, то функция
xu_rpc_http_concise() также возвращает массив.
В массиве, передаваемом функции u_rpc_http_concise(), может быть
до 10 различных параметров, но только один из них обязателен – host.
Эти параметры приведены в табл. 12.1.
Таблица 12.1. Параметры функции xu_rpc_http_concise()
Имя | Описание |
---|---|
host | Имя хоста сервера |
uri | URI сервера (по умолчанию /) |
port | Порт сервера (по умолчанию 80) |
method | Имя вызываемого метода |
args | Аргументы, передаваемые методу |
debug | Уровень отладки (от 0 до 2; 0 – выключена, 2 – наибольший) |
timeout | Ограничение времени выполнения запроса в секундах; значение 0 – нет ограничений |
user | Имя пользователя для базовой аутентификации HTTP, если необходимо |
pass | Пароль для базовой аутентификации, если необходимо |
secure | Для шифрования посылок используется защищенное соединение SSL; требует сборки PHP с поддержкой SSL (при указании требуется передать любое истинное значение) |