这篇文章将为大家详细讲解有关如何在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服务