To have an xmlrpc fault response programatically generated by the server, the php function registered as method handler must return an array containing a FaultCode and a FaultString members.
function $myfunc($methodname, $vals, $extra_data)
{
...
return array('faultCode' => 666, 'faultString' => 'DOH!');
}
xmlrpc_server_register_method
(PHP 4 >= 4.1.0, PHP 5)
xmlrpc_server_register_method — Register a PHP function to resource method matching method_name
Beschreibung
bool xmlrpc_server_register_method
( resource
$server
, string $method_name
, string $function
)Warnung
Diese Funktion ist EXPERIMENTELL. Das Verhalten, der Funktionsname und alles Andere, was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Funktion auf eigenes Risiko.
Warnung
Diese Funktion ist bis jetzt nicht dokumentiert. Es steht nur die Liste der Argumente zur Verfügung.
giunta dot gaetano at sea-aeroportimilano dot it
11-Aug-2006 06:55
nyvsld at gmail dot com
27-Nov-2005 05:03
prototype of registered function:
function method_impl(string $method_name, array $params, array $user_data);
$method_name
the public method name, known by calling client
$params
parameters specified by calling client
$user_data
any local data, passed by `xmlrpc_server_call_method'
dante at lorenso dot com
11-Aug-2005 12:46
To register a callback to a 'static' function within the same class, consider a syntax like the following:
<code>
$callback = array (__CLASS__, "my_function_name");
xmlrpc_server_register_method($xmlrpc_server, "my_function", $callback);
</code>
Doing it this way makes it easier to rename your class later.
eiriks at hollowmatrix dot com
28-Mar-2005 03:08
Remember that you can't do like Chrigu and Nate said if you want to add methods from a static class (Hence you can't create any instances of it).
A workaround is to create lambda functions calling the
methods:
// Our static handler class
static class MyHandler
{
public function getPrice($item)
{
$prices = array("apple" => 4, "orange" => 5);
return $prices[$item];
}
public function buy($item, $number)
{
$price = self::getPrice($item) * $number;
do_thing_to_sell_the_item();
return $price;
}
}
// Use reflection to get method names and parameters
$mirror = new ReflectionClass("MyHandler");
foreach ($mirror->getMethods() as $method)
{
// Create new "lambda" function for each method
// Generate argument list
$args = array();
foreach ($method->getParameters() as $param)
{
$args[] = '$'.$param->getName();
}
$args = implode(',', $args);
// Generate code
$methodname = $method->getName();
$code = "return {$real_class}::{$methodname}({$args});";
// Create function, retrieve function name
$function_name = create_function($args, $code);
// Register the function
xmlrpc_server_register_method($myserver, $methodname, $function_name);
}
Nate Parsons
29-Apr-2003 03:12
In case its not completely obvious what Chrigu meant,
You can register a method inside your class by doing the following:
xml_rpc_server_register_methode($xmlrpc_server, "myClientCall", array(&$this, "handleClientCallFunc"));
where $this == the magic class $this. =)
18-Nov-2002 10:40
Here is an example how to register a class methode:
xml_rpc_server_register_methode($xmlrpc_server, "foo", array(&$bar, "foo_func"));
where $bar is the instance of your class and foo_func a methode of this class. Don't forget the '&'!
hope this may be useful...
Chrigu
