• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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);
    ?>