[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема при использовании XMLRPC
nastya1992
здравствуйте, у меня проблема следующего характера:
есть клиент(содержит интерфейс) и сервер(выполняет обработку)
данные передаются от клиента серверу и обратно через 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)
Цитата
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;
}
}

?>

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 ohmy.gif

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

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.