Самопальный сервис eto'o Хакер, номер #083, стр. 083-124-4 Первым делом установки PEAR-расширение XML_RPC: $ pear install XML_RPC Или можно просто руками скачать с сайта архив с нужными скриптами. Затем уже можно приступать к написанию серверной части нашего приложения. Любое описание сервиса всегда начинается с подключения файла Server.php, в котором находится описание всех необходимых нам служебных классов. Поскольку я не пользовался pear install, а просто скопировал исходники в папку со скриптом, то у меня это выглядит вот так: require_once 'XML_RPC-1.4.3/Server.php'; Затем необходимо определить функцию, которая будет выполнять заданное действие - считать ботов, я назвал ее NumBots. Я приведу ее код и прокомментирую его чуть позже: function NumBots($params) { $param = $params->getParam(0); if (!XML_RPC_Value::isValue($param)) { return $param; } $re=mysql_query("select * from bots where date_reg='$param->scalarval()'"); $rn=mysql_num_rows($re); $val = new XML_RPC_Value($rn, 'int'); return new XML_RPC_Response($val); } Легко понять, что $params - это переменная класса, получение параметров осуществляется при помощи метода getParam(). Затем происходит проверка на корректность полученных данных, составляется элементарный запрос, считается количество возвращенных записей, создается новая переменная класса XML_RPC_Value, а затем возвращается ответ сервера. После описания процедуры необходимо создать экземпляр XML_RPC_Server и сопоставить символическому методу numberOfBots нашу функцию NumBots. Делается это так: $server = new XML_RPC_Server( array( 'numberOfBots' => array( 'function' => 'NumBots' ) )); ?> Вот, в общем-то, и все :). Согласись, все чрезвычайно просто. Но чтобы придать законченность нашей системе, необходимо написать еще клиентскую часть. Первая строка у всех клиентов одинаковая, нужно подключить файл RPC.php: require_once 'XML_RPC-1.4.3/RPC.php'; Затем из передаваемой GET'ом переменной $_GET[date_r] нужно сделать массив переменных XML_RPC_Value: $params = array(new XML_RPC_Value($_GET[date_r], 'string')); Обрати внимание, что конструктор этого класса первым параметром принимает сами данные, а во втором указывается тип - в нашем случае - строка string. После этого создается RPC-сообщение, которое вызывает метод, передавая ему параметры $params: $msg = new XML_RPC_Message('numberOfBots', $params); Затем необходимо создать клиента и отослать наше сообщение: $cli = new XML_RPC_Client('/te/se.php', 'ired.inins.ru'); $resp = $cli->send($msg); После этого происходит обработка ошибок: if (!$resp) { echo 'Ошибка связи:' . $cli->errstr; exit; } if (!$resp->faultCode()) { # Не случилось ошибок $val = $resp->value(); echo 'За '.$_GET[date_r].' зарегистрировано '.$val->scalarval().' ботов'; } else { echo 'Код ошибки: ' . $resp->faultCode() . "\n"; echo 'Причина ошибки: ' . $resp->faultString() . "\n"; |