如何在PHP中利用xml - rpc构造一个Web服务

  介绍

这篇文章将为大家详细讲解有关如何在PHP中利用XML - RPC构造一个Web服务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强>一、概述:

目前进行Web服务通信有两种协议标准,一种是XML - RPC,另外一种是SOAP.XML-RPC比较简单,出现时间比较早,肥皂比较复杂,主要是一些需要稳定,健壮,安全并且复杂交互的时候使用。

PHP自身就集成了XML - RPC和SOAP两种协议的访问,都是集中在xmlrpc扩展当中。另外,在PHP的梨中,不管是PHP 4还是PHP 5,都已经默认集成了XML - RPC扩展,而且该扩展跟xmlrpc扩展无关,能够独立实现XML - RPC的协议交互,如果没有xmlrpc扩展,建议使用梨::XML - RPC扩展。

我们这里主要是以XML - RPC来简单描述Web服务的交互过程,部分内容来自PHP手册,更详细的内容,读者可以参考手册。

<强>二、安装xmlrpc扩展:

如果你的系统中没有安装xmlrpc的PHP扩展,那么请正确安装。

在Windows平台下,首先把PHP安装目录下的扩展php_xmlrpc.dll放到C: \ Windows或者C: \ Winnt目录下,(PHP4的扩展在C: \ PHP \扩展目录中,PHP5的扩展在C: \ PHP \ ext目录中. dll扩展文件的具体安装目录视你的PHP安装目录而定,此处仅为示例说明),同时在C: \ Windows \ PHP . ini中或者C: \ Winnt \ PHP . ini中把扩展=php_xmlrpc.dll前面的分号“,“去掉,然后重启Web服务器后查看phpinfo()有没有XML - RPC项目就能够确定是否已经正确安装xmlrpc扩展。

在Unix/Linux平台下,如果没有安装xmlrpc扩展,请在重新编译PHP,在配置的时候请加入——with-xmlrpc选项,然后查看phpinfo()看是否正常安装xmlrpc。

(注意:以下操作都是建立在xmlrpc扩张正常安装前提下,请务必正确安装。)

<强>三,XML - RPC工作原理:

XML - RPC大致就是整个过程就是使用XML来进行通信。首先构造一个RPC服务器端用来出来从RPC客户端传递过来的使用XML封装的请求,并且把处理结果通过XML的形式返回给RPC客户端,客户端就去分析XML获取自己需要的数据。

XML - RPC的服务器端必须有现成的函数提供给客户端调用,并且客户端提交的请求中的函数和方法必须和服务器端的一致,否则将无法获取所需要的结果。

下面我进行简单的代码来描述整个过程。

<强>四,XML - RPC实践:

服务器端使用xmlrpc_server_create函数产生一个服务器端,然后把需要需要暴露的RPC调用接口进行注册,接受RPC客户端柱过来的XML数据,然后进行处理,处理结果通过XML的形式显示给客户端。

rpc_server。php文件代码如下:

/* *   *,函数:提供给RPC客户端调用的函数   *,参数:   *,method 美元;客户端需要调用的函数   *,params 美元;客户端需要调用的函数的参数数组   *,返回:返回指定调用结果   */function  rpc_server_func(方法,美元,美元params), {   美元$ parameter =, params [0];   if  (parameter 美元;==,“get")   {,   return 美元;=,& # 39;& # 39;却;能够data  by  get 方法# 39;& # 39;,,   }   其他的   {   return 美元;=,& # 39;& # 39;Not  specify  method 或是params # 39; & # 39;;   },   return 美元返回,   },//产生一个xml - rpc的服务器端   xmlrpc_server 美元;=,xmlrpc_server_create (),,//注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_func函数   xmlrpc_server_register_method (xmlrpc_server美元,,“rpc_server",,“rpc_server_func"),,//接受客户端柱过来的XML数据   $ request =, HTTP_RAW_POST_DATA美元;//执行调用客户端的XML请求后获取执行结果   $ xmlrpc_response =, xmlrpc_server_call_method (xmlrpc_server美元,,请求,,null),,//把函数处理后的结果XML进行输出   头(& # 39;& # 39;内容类型:,text/xml # 39; & # 39;),,   echo  xmlrpc_response;美元,//销毁xml - rpc服务器端资源   xmlrpc_server_destroy ($ xmlrpc_server);

至此服务器端就构造好了,那么再构造我们的RPC客户端。客户端大致通过插座访问XML - RPC服务器端80的端口,然后把需要调用的RPC接口封装到XML里,通过帖子请求提交给RPC服务器端,最后获取服务器端返回结果。

rpc_client。php文件代码如下:

/* *   *,函数:提供给客户端进行连接xml - rpc服务器端的函数   *,参数:   *,host 美元;需要连接的主机   *,port 美元;连接主机的端口   *,rpc_server 美元;xml - rpc服务器端文件   *,request 美元;封装的XML请求信息   *,返回:连接成功成功返回由服务器端返回的XML信息,失败返回错误的   */function  rpc_client_call(主机,美元,美元港口,rpc_server美元,美元请求),{,//打开指定的服务器端   fp 美元;=,fsockopen(主机,美元,美元的端口),,//构造需要进行通信的xml - rpc服务器端的查询帖子请求信息   query 美元;=,“POST  rpc_server 美元;HTTP/1.0 \ nUser_Agent:, XML-RPC 客户端\ nHost:,“。美元干净自己的主机\ nContent-Type:, text/xml \ nContent-Length:,“.strlen(请求)美元霸主地位;\ n \ n"。美元请求!”\ n",,//把构造好的HTTP协议发送给服务器,失败返回错误的   if  (! fputs (fp美元,,查询,,strlen(查询)美元)),   {,=$ errstr “Write  error",,   return 虚假,   },//获取从服务器端返回的所有信息,包括HTTP头和XML信息   contents 美元;=,& # 39;& # 39;& # 39;& # 39;,,   while  (! feof (fp)美元)   {,   contents 美元。=,fgets (fp);,   },//关闭连接资源后返回获取的内容   文件关闭(fp);,   return 内容;美元,   },//构造连接RPC服务器端的信息   host 美元;=,& # 39;& # 39;localhost # 39; & # 39;,,   $ port =,, 80;   rpc_server 美元;=,& # 39;& # 39;/~ heiyeluren rpc_server.php& # 39; & # 39;;//把需要发送的XML请求进行编码成XML,需要调用的方法是rpc_server,参数是   request 美元;=,xmlrpc_encode_request (& # 39; & # 39; rpc_server& # 39; & # 39;,, & # 39; & # 39;得到# 39;& # 39;),,//调用rpc_client_call函数把所有请求发送给xml - rpc服务器端后获取信息   $ response =, rpc_client_call(主机,美元,美元港口,rpc_server美元,美元请求),,//分析从服务器端返回的XML,去掉HTTP头信息,并且把XML转为PHP能识别的字符串   split 美元;=,& # 39;& # 39;& # 39;& # 39;;   $ xml =,爆炸(分美元,,反应);   $ xml =, split 美元;只最后($ xml);   $ response =, xmlrpc_decode ($ xml);//输出从RPC服务器端获取的信息   print_r(响应)美元;

如何在PHP中利用xml - rpc构造一个Web服务