• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP的SOAP原理及实现详解

php 搞代码 4年前 (2022-01-23) 17次浏览 已收录 0个评论

PHP的SOAP原理及实现

1. 简介:

SOAP : (全称Simple Object Access Protocol) 为交换数据的一种协议规范,该通信协议位于HTTP之上,以XML格式语言进行数据互换,使用场景:如果各项目之间使用不用的开发语言要进行数据互换,就需要一个互相都能通信的工具,WSDL,SOAP为此诞生

WSDL: WSDL 指网络服务描述语言 (Web Services Description Language),WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。

2. 配置:

PHP的SOAP扩展开启及配置

WIn环境

打开PHP.ini extension=php_soap.dll去掉前面的分号

Linux环境

编译时加上 –enable-soap

WSDL缓存类型 1为磁盘 2为内存

soap.wsdl_cache = 1

缓存文件保存位置

soap.wsdl_cache_dir = /tmp

开启或关闭WSDL缓存功能,由于每次进行SOAP都会有下载对方XML文档的过程,也是其效率低下的原因

soap.wsdl_cache_enabled =1

缓存文件的最大数量

soap.wsdl_cache_limit

缓存文件生存时间

soap.wsdl_cache_ttl = 3600

3. 应用实例:

a. 不使用wsdl的情况

服务端:

<span style="font-size:18px"><?phpclass testclass{		public function getName($name)	{		return "hello ".$name;	}}function getName($name){	return "hello ".$name;}$a = new SoapServer(null,array("uri<strong style="color:transparent">本文来源gaodai#ma#com搞@@代~&码*网/</strong><strong>搞gaodaima代码</strong>"=>"index.php"));$a->setClass("testclass");  //指定一个类中的所有方法//$a->addFunction("test");  //指定单个方法$a->handle();   //处理访问</span>

uri为必填项,客户端的uri必须和服务端的保持一致

客户端

<span style="font-size:18px">try{	$client = new SoapClient(null, array("location"=>"http://localhost/instance/index.php","uri"=>"index.php"));	//echo $client->getName("getName");          //调用方法	echo $client->__soapCall ("getName",array("name"));    //调用方法	}catch(Exception $e){	print_r($e->getMessage(),true);}</span>

location为SOAP服务端访问地址,uri与服务端保持一致

b. 使用WSDL方法

因使用wsdl之前需要手动生成xml文件,手写的话太过繁琐,可使用SoapDiscovery.class.php 开源类生成

下载地址

<span style="font-size:18px"><?phpclass testclass{	public function getName($name)	{		return "hello ".$name;	}}include_once "SoapDiscovery.class.php";$discovery = new SoapDiscovery("testclass","testclass");$filename = $discovery->getWSDL(); //生成XML文件echo $filename;</span>

服务端

<span style="font-size:18px">$a = new SoapServer("testclass.wsdl");$a->setClass("testclass");  //指定一个类中的所有方法$a->handle();   //处理访问 </span>

客户端

<span style="font-size:18px">try{	$client = new SoapClient("http://localhost/instance/index.php?wsdl");	//echo <span style="font-family:Arial,Helvetica,sans-serif">$client</span>->getName("getName");	//echo <span style="font-family:Arial,Helvetica,sans-serif">$client</span><span style="font-family:Arial,Helvetica,sans-serif">->__soapCall ("getName",array("name"));</span>	print_r(<span style="font-family:Arial,Helvetica,sans-serif">$client</span><span style="font-family:Arial,Helvetica,sans-serif">->__getFunctions()); //打印服务端所有提供的方法</span></span>
<span style="font-size:18px">}catch(Exception $e){	print_r($e->getMessage(),true);}</span>

扩展类所提供的方法可参考PHP Manual


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP的SOAP原理及实现详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址