• 售前

  • 售后

热门帖子
入门百科

PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】

[复制链接]
和你相伴1 显示全部楼层 发表于 2021-10-26 13:30:05 |阅读模式 打印 上一主题 下一主题
本文实例陈诉了PHP中soap用法。分享给大家供大家参考,具体如下:
一、起主要设置服务器情况
修改php.ini
得添加extension=php_soap.dll (加载soap 内置包)
修改soap.wsdl_cache_enabled=1 改为soap.wsdl_cache_enabled=0 这个是soap的缓存,测试的时候最好改为0,上线稳固了改为1
soap有两种模式一种是wsdl,一种是no-wsdl
二、熟悉几个函数
1. SoapServer
SoapServer用于创建php服务器端页面时界说可被调用的函数及返回 相应数据
格式:
  1. $soap = new SoapServer($wsdl,$array);
复制代码
其中,
  1. $wsdl
复制代码
为soap使用得wsdl文件,wsdl是形貌Web Service的一种 标准格式,若将$wsdl设置为null,则表现不使用wsdl模式。
  1. $array
复制代码
是 SoapServer的属性信息,是一个数组。
SoapServer对象的addFunction方法是用来声明哪个函数可以被客户端调用, 语法格式如下:
  1. $soap->addFunction($function_name);
复制代码
其中,
  1. $soap
复制代码
是一个SoapServer对象,
  1. $function_name
复制代码
是须要被调用的函数名。
SoapServer对象的handle方法用来处理用户输入并调用相应的函数,最后返回 给客户端处理的效果。语法格式如下:
  1. $soap->handle([$soap_request]);
复制代码
其中,$soap是一个SoapServer对象,$soap_request是一个可选参数,用来表现 用户的哀求信息。如果不指定$soap_request,则表现服务器将吸取用户的全部 哀求。
2. SoapClient
SoapClient用于调用远程服务器上的SoapServer页面,并实现了对相应函数的调用
格式:
  1. $soap = new SoapClient($wsdl,$array);
复制代码
参数$wsdl和$array与SoapServer雷同
SoapClient的方法, 创建语法如下:
  1. $soap->user_function($params);
复制代码
其中,$soap是一个SoapClient对象,user_function是服务器端要调用的函数,$params 是要传入函数的参数。
3. SoapFault
SoapFault用于生成soap访问过程中大概出现的错误。创建一个soapFault对象的语法格式
格式:
  1. $fault = new SoapFault($faultcode,$faultstring);
复制代码
其中,
  1. $faultcode
复制代码
是用户界说的错误代码,
  1. $faultstring
复制代码
是用户自界说的错误信息。soapFault 对象会在服务器端页面出现错误时自动生成,大概通过用户自行创建SoapFault对象时生成。对于 Soap访问时出现的错误,客户端可通过捕捉SoapFalut对象来获得相应的错误信息。 在客户端捕获SoapFault对象后,可以通过下面的代码获得错误代码和错误信息。
  1. $fault->faultcode;//错误代码
  2. $fault->faultstring;//错误信息
复制代码
其中,$fault是在前面创建的SoapFault对象。
4. SoapHeader
soapheader用于形貌soap的header信息,一般用于认证
  1. /*
  2. *SoapHeader参数说明如下所示:
  3. *'http://tempuri.org/'  namespace(命名空间可省略)
  4. *'MySoapHeader'     SoapHeader头的类名
  5. *'array(...)'      存放标识身份的字符串参数
  6. *'true'         是否必须处理该header
  7. */
复制代码
格式:
  1. $h = new SoapHeader('http://192.168.0.153/hao/', 'auth', '123456789', false, SOAP_ACTOR_NEXT);
复制代码
三、实例
不消wsdl模式的代码
服务端:
  1. //认证服务端
  2. class Test{
  3.   public function auth($a)
  4.   {
  5.     if($a != '123456789'){
  6.       throw new SoapFault('Server', '您无权访问');
  7.     }
  8.   }
  9.   function say()
  10.   {
  11.     return 'Hi11111';
  12.   }
  13. }
  14. $srv = new SoapServer(null, array('uri' => 'http://192.168.0.153/hao'));
  15. $srv->setClass('Test');
  16. $srv->handle();
复制代码
Test类中auth是认证判断的,这个方法对应客户端soapheader中的方法
客户端:
  1. //加密的客户端
  2. $cli = new SoapClient(null, array('uri' => 'http://192.168.0.153/hao/', 'location' => 'http://192.168.0.153/hao/test.php', 'trace' => true,'encoding'=>'utf-8'));
  3. $h = new SoapHeader('http://192.168.0.153/hao/', 'auth', '123456789', false, SOAP_ACTOR_NEXT);
  4. $cli->__setSoapHeaders(array($h));
  5. try {
  6. echo $cli->say();
  7. } catch (Exception $e) {
  8. echo $e->getMessage();
  9. }
复制代码
soapheader中auth对应服务端auth方法
如果不 认证,可以去掉下面这两行:
  1. $h = new SoapHeader('http://192.168.0.153/hao/', 'auth', '123456789', false, SOAP_ACTOR_NEXT);
  2. $cli->__setSoapHeaders(array($h));
复制代码
wsdl模式
起首先生成wsdl文件,至于怎么生成网站很多
服务端:
  1. //wsdl服务端
  2. Require './server.class.php';
  3. $server = new SoapServer('./server.wsdl');
  4. $server->setClass('Server');
  5. $server->handle();
复制代码
server.class.php类代码
  1. class Server {
  2.   public function auth($a){
  3.     if($a != '123456789'){
  4.     throw new SoapFault('Server', '您无权访问');
  5.     }
  6.   }
  7.   public function test() {
  8.     return 'you are testing';
  9.   }
  10. }
复制代码
客户端:
  1. //wsdl文件客户端
  2. $soap = new SoapClient('http://192.168.0.153/hao/server.wsdl'); //如果是远程,那当然写dizzylion.wsdl的URL了。
  3. $h = new SoapHeader('http://192.168.0.153/hao/', 'auth', '123456789', false, SOAP_ACTOR_NEXT);
  4. $soap->__setSoapHeaders(array($h));
  5. try {
  6. echo $soap->test();
  7. } catch (Exception $e) {
  8. echo $e->getMessage();
  9. }
复制代码
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php socket用法总结》、《php字符串(string)用法总结》、《PHP数学运算本领总结》、《php面向对象步伐计划入门教程》、《PHP数组(Array)操作本领大全》、《PHP数据布局与算法教程》、《php步伐计划算法总结》及《PHP网络编程本领总结》
希望本文所述对大家PHP步伐计划有所帮助。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作