PHP的SOAP原理及实现
来源:互联网 发布:linux命令echo使用简介 编辑:程序博客网 时间:2024/05/01 15:38
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"=>"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
- PHP的SOAP原理及实现
- 【soap】利用php的soap实现webservice
- php soap webservice的实现
- PHP的SOAP扩展原理和使用
- PHP文件上传的原理及实现
- PHP文件上传的原理及实现
- php文件上传的原理及实现
- PHP文件上传的原理及实现
- PHP文件上传的原理及实现
- PHP文件上传的原理及实现
- php文件上传的原理及实现
- php文件上传的原理及实现
- php soap简单实现
- PHP SOAP实现WebService
- PHP的SOAP扩展原理和使用(转)
- 【soap】SOAP扩展PHP轻松实现WebService
- [转]PHP函数的实现原理及性能分析
- PHP函数的实现原理及性能分析
- error: ‘errno’ was not declared in this scope
- 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
- 判断ios中是否安装了某些软件
- hook之你我之见
- Revit 学习资源
- PHP的SOAP原理及实现
- linux下添加自签名根证书的脚本
- mysql trouble shooting---- 从库停止同步lock_wait_timeout_exceeded_try_restarting_transaction
- MySQL 获取农历月份函数
- android statusbar service
- 基于storm和hadoop的广告系统研究【6】
- 实现web页面局部动态刷新
- COM组件应用(3)——BHO学习
- android SystemClock