xmlrpc_server_call_method()
(PHP 4 >= 4.1.0, PHP 5, PHP 7)
解析 XML 请求同时调用方法
说明
xmlrpc_server_call_method(resource $server,string $xml, mixed $user_data[,array $output_options]): string
Warning此函数是实验性的。此函数的表象,包括名称及其相关文档都可能在未来的PHP 发布版本中未通知就被修改。使用本函数风险自担。
Warning本函数还未编写文档,仅有参数列表。
xmlrpc_server_call_method() with class methods <?php require_once ('Connections/adodb_mysql_connection.php'); // Instantiating my own class $my_report = new external_report($db_connection); // Setting up the XML-RPC "server" $xmlrpc_server_handler = xmlrpc_server_create(); xmlrpc_server_register_method($xmlrpc_server_handler, "external_method", array(&$my_report, "export")); // Creating XML return data if ($response = xmlrpc_server_call_method($xmlrpc_server_handler, $HTTP_RAW_POST_DATA, null)) { header('Content-Type: text/xml'); echo $response; } // **************** class definition **************** class external_report { protected $db_connection; public function __construct($db_connection_pointer) { if (method_exists($db_connection_pointer, "Execute")) $this->db_connection = $db_connection_pointer; else die("..."); } public function export($method_name, $params_array) { $id_dir = (int)$params_array[0]; $id_usr = (int)$params_array[1]; // not used, just an example // We have to add arguments' validating code here and NOT inside the constructor (as usual) // because arguments are passed directly by xmlrpc_server_call_method (?!!) $myexport = array(); $dirs_query = "SELECT documento_id FROM tabella_cartelle WHERE cartella_id = ".$id_dir; $dirs_result = $this->db_connection->Execute($dirs_query) or die("..."); $index = 0; while(!$dirs_result->EOF) { $docs_query = "SELECT codice, titolo FROM tabella_documenti WHERE id_documento = ".$dirs_result->Fields('documento_id'); $docs_result = $this->db_connection->Execute($docs_query) or die("..."); $myexport[$index]['codice'] = $docs_result->Fields('codice'); $myexport[$index]['titolo'] = $docs_result->Fields('titolo'); $index++; $dirs_result->MoveNext(); } return $myexport; } } ?>
<?php /* method implementation */ function impl($method_name,$params,$user_data){ var_dump(func_get_args('impl')); return array_sum($params); } /* create server */ $s=xmlrpc_server_create(); xmlrpc_server_register_method($s,'add','impl'); /* calling server method */ $req=xmlrpc_encode_request('add',array(1,2,3)); $resp=xmlrpc_server_call_method($s,$req,array(3,4)); /* process result */ $decoded=xmlrpc_decode($resp); if(xmlrpc_is_fault($decoded)){ echo 'fault!'; } var_dump($decoded); ?>