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的情况

服务端:

 
  1. <span style="font-size:18px;"><?php

  2. class testclass{

  3.  
  4. public function getName($name)

  5. {

  6. return "hello ".$name;

  7. }

  8. }

  9.  
  10.  
  11. function getName($name)

  12. {

  13. return "hello ".$name;

  14. }

  15.  
  16. $a = new SoapServer(null,array("uri"=>"index.php"));

  17. $a->setClass("testclass"); //指定一个类中的所有方法

  18. //$a->addFunction("test"); //指定单个方法

  19. $a->handle(); //处理访问</span>

 

 

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

客户端

 

 
  1. <span style="font-size:18px;">try{

  2. $client = new SoapClient(null, array("location"=>"http://localhost/instance/index.php","uri"=>"index.php"));

  3. //echo $client->getName("getName"); //调用方法

  4. echo $client->__soapCall ("getName",array("name")); //调用方法

  5.  
  6. }catch(Exception $e){

  7. print_r($e->getMessage(),true);

  8. }</span>

 

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

 

b. 使用WSDL方法

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

下载地址 

 

 
  1. <span style="font-size:18px;"><?php

  2. class testclass{

  3.  
  4. public function getName($name)

  5. {

  6. return "hello ".$name;

  7. }

  8. }

  9.  
  10. include_once "SoapDiscovery.class.php";

  11.  
  12. $discovery = new SoapDiscovery("testclass","testclass");

  13. $filename = $discovery->getWSDL(); //生成XML文件

  14. echo $filename;</span>

服务端

 

 

 
  1. <span style="font-size:18px;">$a = new SoapServer("testclass.wsdl");

  2. $a->setClass("testclass"); //指定一个类中的所有方法

  3. $a->handle(); //处理访问 </span>

客户端

 

 

 
  1. <span style="font-size:18px;">try{

  2. $client = new SoapClient("http://localhost/instance/index.php?wsdl");

  3. //echo <span style="font-family:Arial,Helvetica,sans-serif">$client</span>->getName("getName");

  4. //echo <span style="font-family:Arial,Helvetica,sans-serif">$client</span><span style="font-family:Arial,Helvetica,sans-serif">->__soapCall ("getName",array("name"));</span>

  5. print_r(<span style="font-family:Arial,Helvetica,sans-serif">$client</span><span style="font-family:Arial,Helvetica,sans-serif">->__getFunctions()); //打印服务端所有提供的方法</span></span>

 
  1. <span style="font-size:18px;">}catch(Exception $e){

  2. print_r($e->getMessage(),true);

  3. }</span>

 

 

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

来源:https://blog.csdn.net/marvinblog/article/details/14163557

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值