设为首页 加入收藏

TOP

PHP写Web Service服务端
2015-02-13 18:24:23 来源: 作者: 【 】 浏览:30
Tags:PHP Web Service 服务

1) WebService技术介绍


WebService是一种跨编程语言和跨操作系统平台的远程调用技术。只有通过Web Service,客户端和服务器才能够自由的用HTTP进行通信,不论两个程序的平台和变成语言是什么。


XML、SOAP和WSDL是Web Service平台的三大技术:


WebService采用HTTP协议传输数据,采用XML格式封装数据,即XML中说明调用远程服务对象的哪个方法、传递的参数是什么、以及服务对象的返回结果是什么。XML是WebService平台中表示数据的格式,除了易于建立和易于分析外,XML主要的有点在于它既是平台无关的,又是厂商无关的。


SOAP,WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议,SOAP提供了标准的RPC方法来调用Web Service。SOAP协议 = HTTP协议 + XML数据格式。


WSDL(Web Service Description Language)是基于XML的语言,用于描述Web Service及其函数、参数和返回值,它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL及时机器可阅读的,又是人可阅读的。WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1、注册到UUID服务器,以便被人查找;2、直接告诉给客户端调用者。


2) Apache相关配置


为了能够实现Web Service,httpd必须支持soap的扩展,这里以yum安装httpd及soap扩展为例进行说明:


1> 安装httpd


yum install httpd


2> 安装php


yum install php


3> 配置httpd支持php解析


在/etc/httpd/conf/httpd.conf中添加如下:


AddType application/x-httpd-php .php


AddType application/x-httpd-php-source .phps


4> 重新启动httpd


service httpd restart


5> 检查是否安装了soap扩展


/usr/bin/php -m | grep soap? //! 如果存在则说明已经安装了soap扩展,如果不存在,执行下一步


6> 安装soap扩展


yum install php-soap //! 安装完之后再次检查,重启httpd


7> 验证soap扩展是否正确安装


既可以通过php -m | grep soap的方式,也可以通过phpinfo();的方式。


3) PHP实现WebService服务端


1> 定义服务类——Service.php


该服务端就是实现你想要对外提供的接口,假设我们需要对外提供一个函数,它接收一个字符串,然后返回”Hello ” + 输入的字符串这个小功能,服务类很简单,如下所示:


? class Service
? {
? public function sayHello($content)
? {
? ? ? ? return "Hello ".$content;
? }
? }
?>


2> 生成wsdl文件——create_wsdl.php


为了生成wsdl文件,我们可以使用网上提供的SoapDiscovery.class.php中的getWSDL提供的方法来实现,该SoapDiscovery.class.php的代码在网上可以下载到,为了生成文件,我们需要修改getWSDL方法中的部分代码(加上写文件的代码),如下所示:


//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '');
? ?
? ?//!注释掉return,添加如下代码,目的是为了调用getWSDL生成.wsdl文件
? ?$fso = fopen($this->class_name.".wsdl", "w");
? ?fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, ''));
? ? ? ? ? ? ? ? ? ? ? ? fclose($fso);


现在我们就可以定义自己的create_wsdl.php了,只需要调用一下这个方法即可,如下:


?include("Service.php");
?include("SoapDiscovery.class.php");?
?//! 第一个参数是类名,生成的wsdl文件就是以它来命名的;第二个参数是服务的名称,可以随便写
?$disco = new SoapDiscovery('Service', 'soap');
?$disco->getWSDL();
?>


3> 修改服务端——Service.php


修改Service.php,添加一些代码,如下所示:


? class Service
? {
? public function sayHello($content)
? {
? ? ? ? return "Hello ".$content;
? }
? }
?
? $service = new SoapServer('http://192.168.17.129/soap/Service.wsdl', array('soap_version' => SOAP_1_2));
? $service->setClass("Service"); //! 注册Service类的所有方法
? $service->handle(); //! 处理请求
?>


4> 修改Service.wsdl文件


PHP写Web Service服务端


5> 客户端测试——client.php


client.php用来测试我们刚写的Web Server的服务端能否可用,代码如下:


? $soap = new SoapClient('http://192.168.17.129/soap/Service.php?wsdl');?
? echo $soap->sayHello("linuxidc");
?>


输出结果如下:


Hello linuxidc


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++类的实例化对象的大小之sizeof.. 下一篇C++内存分配与复制构造函数笔试考..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: