您好,欢迎访问一九零五行业门户网

php中soap应用

soap :简单对象访问协议 (soap:simple object access protocol) 简单对象访问协议(soap)是一种轻量的、简单的、基于 xml 的协议,它被设计成在 web 上交换结构化的和固化的信息。 soap 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议
soap:简单对象访问协议
(soap:simple object access protocol)
简单对象访问协议(soap)是一种轻量的、简单的、基于 xml 的协议,它被设计成在 web 上交换结构化的和固化的信息。 soap 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( http),简单邮件传输协议(smtp),多用途网际邮件扩充协议(mime)。它还支持从消息系统到远程过程调用(rpc)等大量的应用程序。
下面已一个简单的例子介绍一下soap在php中的应用。
1、使用php提供soap接口给其他人
要使用php提供soap接口,我们唯一需要做的就是使用soapserver类声明一个接口。
     下面是示例代码:
php文件:soapinterfaceprovider.php
  'http://www.qqstore.net/soap/')); //声明供用户调用的接口 $soap -> addfunction(getsoapdata); $soap -> handle();?>
2、调用php中已经提供好的soap接口
     要测试步骤1中提供的接口,只需要执行下面的测试代码。(只需要执行下面的代码,不需要事先启动或执行
     soapinterfaceprovider.php文件,调用下面的测试代码的时候,php会自动执行soapinterfaceprovider.php文件。所以
     这里的location参数非常重要,不能出错,必须是实际放置soapinterfaceprovider.php的位置)
     php文件:soapclient.php
  'http://localhost/webcenter/soap/soapinterfaceprovider.php', 'uri' => 'http://www.qqstore.net/soap/'));//调用getsoapdata接口$data = $client -> getsoapdata();echo 获取到数据: . $data;?>
在浏览器中输入下面连接进行测试:http://localhost/soap/soapclient.php   (根据实际位置进行调整)
 执行结果:
 获取到数据:hello world
3、代码优化
上面提供的soap接口的文件soapinterfaceprovider.php中,只有一个方法,如果有很多方法需要提供的话,每次都调用addfunction方法就显得有点麻烦了。并且将所有实际的方法都写在soapinterfaceprovider.php文件中也不太合适。
      这里我们可以将所有实际要调用的方法提出来放到一个单独的php类中,并且使用setclass方法一次性声明所有的接口。
      下面是示例代码:
      php文件:soapmethod.class.php
php文件:soapinterfaceprovider.php
  'http://www.qqstore.net/soap/'));//声明供用户调用的接口$soap -> setclass(soapmethod);$soap -> handle();?>
我在进行测试时,一开始没有使用setclass方法,而是使用了addfunction方法,实际调用的方法也时放到了soapmethod类中,和
上面的soapmethod.class.php代码一样。结果调用addfunction方法时,出现如下错误:
fatal error: uncaught soapfault exception: [http] not found in c:/appserv/www/webcenter/soap/soapclient.php:4 stack trace: #0 [internal function]: soapclient->__dorequest('__call('getsoapdata', array) #2 c:/appserv/www/webcenter/soap/soapclient.php(4): soapclient->getsoapdata() #3 {main} thrown in c:/appserv/www/webcenter/soap/soapclient.php on line 4
后发现是用于方法定义在了类中,soapinterfaceprovider.php文件中无法找到。将soapmethod.class.php中的类定义去掉,只保留定
义的方法就可以了。
      如果创建soapclient时传入的location参数有问题,也会出现上面的错误。
其它类似信息

推荐信息