есть клиент(содержит интерфейс) и сервер(выполняет обработку)
данные передаются от клиента серверу и обратно через XML (клиент
передает данные серверу, сервер выводит данные и кидает их обратно
клиенту, который выводит результат)
необходимо, используя XML RPC на php, написать взаимодействие клиента и сервера
при выполнении и клиент и сервер выдают ошибки - ругаются на функции,
что они не существуют
клиент на xmlrpc_encode_request, а сервер на xmlrpc_server_register_method.
пример кода:
Сервер:
<?php
/*
Функция-обработчик получаемых данных. $method_name - имя вызываемого
метода, $params - параметры, $user_data - пользовательские данные.
*/
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));
}
?>
заранее спасибо!
Спустя 5 минут, 11 секунд (2.04.2012 - 21:06) Игорь_Vasinsky написал(а):
Цитата |
xmlrpc_server_create() |
пишут - эксперементаьная и непредсказуемая...
а что за ошибки? оригинальный текст покажи.
а с классом не игрался?
Свернутый текст
<?php
class XMLRPCServer {
private $serverHandler;
private $externalFunctions;
public function __construct() {
$this->serverHandler = xmlrpc_server_create();
$this->externalFunctions = array();
}
public function registerMethod($externalName, $function, $parameterNames) {
if($function == null) $function = $externalName;
xmlrpc_server_register_method($this->serverHandler, $externalName, array(&$this, 'callMethod'));
$this->externalFunctions[$externalName] =
array('function' => $function,
'parameterNames' => $parameterNames);
}
public function callMethod($functionName, $parametersFromRequest) {
$function = $this->externalFunctions[$functionName]['function'];
$parameterNames = $this->externalFunctions[$functionName]['parameterNames'];
$parameters = array();
foreach($parameterNames as $parameterName) {
$parameters[] = $parametersFromRequest[0][$parameterName];
}
return call_user_func_array($function, $parameters);
}
public function computeAnswer() {
return xmlrpc_server_call_method($this->serverHandler, file_get_contents('php://input'), null);
}
}
// USAGE EXAMPLE HERE
$xmlRPCServer = new XMLRPCServer();
$someServer = new SomeXmlRPCServer($xmlRPCServer);
$answer = $xmlRPCServer->computeAnswer();
header('Content-Type: text/xml');
print($answer);
class SomeXmlRPCServer{
private $xmlRPCServer;
public function __construct($xmlRPCServer) {
$this->xmlRPCServer = $xmlRPCServer;
$this->xmlRPCServer->registerMethod(
'selectDatabase', // The name the XML-RPC Client calls
array(&$this, 'selectDatabaseInternal'), // Pointer to the method, can be a simple string if you have global functions
array('dbName', 'something') // Name of the parameters and their ordering
);
}
public function selectDatabaseInternal($dbName, $test) {
return 'dbName:.'.$dbName.'.test:'.$test;
}
}
?>
Спустя 4 минуты, 39 секунд (2.04.2012 - 21:11) nastya1992 написал(а):
Цитата (Игорь_Vasinsky @ 2.04.2012 - 18:06) | ||
пишут - эксперементаьная и непредсказуемая... а что за ошибки? оригинальный текст покажи. а с классом не игрался? Свернутый текст <?php |
Fatal error: Call to undefined function xmlrpc_server_register_method() in /xmlrpc/server.php on line 20
Fatal error: Call to undefined function xmlrpc_encode_request() in /client.php on line 96
Спустя 3 минуты, 50 секунд (2.04.2012 - 21:15) Игорь_Vasinsky написал(а):
http://forum.dklab.ru/viewtopic.php?p=193656
так установить бы.. и уточнить есть ли поддержка данной библиотеки на виртуальном хостинге, моло ли - документации как таковой нет, работать будет или нет - ни кто не говорит.

так установить бы.. и уточнить есть ли поддержка данной библиотеки на виртуальном хостинге, моло ли - документации как таковой нет, работать будет или нет - ни кто не говорит.