У меня есть класс, который запускает процесс сам по себе
Псевдокласс
class MyClass {
private $x;
private $y
// filename is INI file, each project have its own INI file
public function __construct($filename) {
// read and set value from INI file
// set some default values here as well
}
/**
* Start Process
*
* @param
* @return
*/
public function startProcess() {
// run process here
$y = $this->getX(); // and so on
echo "Process Started: ".$y."\n";
}
// This is the change for the XMLRPC
/*
public function startProcess($value) {
// run process here
echo "Process Started: ".$value."\n";
}
*/
/**
* Set X
*
* @param $x
* @return
*/
private function setX($x) {
$this->x = $x;
}
/**
* Get X
*
* @param
* @return $x
*/
private function getX() {
return $this->x;
}
// and so on
}
Чтобы выполнить класс, я бы сделал что-то вроде этого
include('MyClass.php');
$process = new MyClass('file.ini');
$process->setX('blah');
$process->startProcess();
Теперь я хочу, чтобы это было инициализировано вызовом XMLRPC, где я просто передал бы ему переменную в вызове метода. Я следовал этому учебнику , но я не уверен, что смогу, вот что я пытаюсь. Теперь вместо установки X перед раздачей я просто передам ее функции startProcess
Сервер XMLRPC:
ini_set("include_path", "/usr/share/php/libzend-framework-php");
require_once('Zend/XmlRpc/Server.php');
/**
* Start Process Wrapper
*
* @param
* @return
*/
function startProcessWrapper($value) {
include('MyClass.php'); // I have change the startProcess() to take a variable
$process = new MyClass('file.ini');
$process->startProcess('passing x here');
}
$server = new Zend_XmlRpc_Server();
$server->addFunction('startProcessWrapper', 'webservice');
echo $server->handle();
Клиент XMLRPC:
ini_set("include_path", "/usr/share/php/libzend-framework-php");
require_once('Zend/XmlRpc/Client.php');
$server = new Zend_XmlRpc_Client('http://localhost/xmlrpc_server.php');
$client = $server->getProxy();
$request = array(
array(
'methodName' => 'system.listMethods',
'params' => array()
),
array(
'methodName' => 'system.methodHelp',
'params' => array('webservice.startProcess')
),
array(
'methodName' => 'webservice.startProcess',
'params' => array('123456')
));
$response = $client->system->multicall($request);
echo print_r($response,true);
Вот ответ, который я получаю:
Array
(
[0] => Array
(
[0] => system.listMethods
[1] => system.methodHelp
[2] => system.methodSignature
[3] => system.multicall
[4] => webservice.startProcess
)
[1] => Start Process Wrapper
[2] => Array
(
[faultCode] => 623
[faultString] => Calling parameters do not match signature
)
)
Почему это не работает? Просто пытаетесь найти способ для XMLRPC запустить мой учебный процесс, предложения?