`
yushine
  • 浏览: 197171 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

PHP 中使用 SOAP(1)

阅读更多
SOAP,英文是“肥皂”的意思。但就是这个玩意在很大程度上影响了互联网世界,前几年疯炒“Web服务”概念之后,SOAP就是其成就或者说“遗产”,因为 SOAP 就是迎来实现 Web 服务的。

    SOAP = Simple Object Access Protocol,简单对象访问协议。它是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

    通过 SOAP 协议实现的 Web 服务,使全世界的程序员编写的类、函数可以集合起来,建成一个巨大的函数库,而且是语言无关的。这为软件事业描绘了一个灿烂的发展前景,只要网络连在一起,就可以实现代码级的逻辑共享,过去的跨进程、跨机器、跨网络的通信问题全部都解决了,而且 http 协议是能够穿越防火墙的(其实是防火墙一般不封锁http协议的80端口,否则谁也别上互联网)。

    难怪很多人非常看好这项技术,称其“激动人心”。而 Web 服务实现起来又很简单,可以简单的基于现在互联网上无数的 Web 平台来发布。简单的往往是最美的,Web服务就是一个现实的例子。

    PHP 中,在 php.ini 文件中开启了 php_soap.dll 扩展后,就可以支持 SOAP 了。

    在soap扩展库中,主要包括三种对象。

    1、SoapServer

    用于创建php服务器端页面时定义可被调用的函数及返回响应数据。创建一个SoapServer对象的语法格式如下:
    $soap = new SoapServer($wsdl, $array);
    其中,$wsdl为shoap使用得wsdl文件,wsdl 是描述 Web Service的一种标准格式,若将$wsdl设置为null,则表示不使用wsdl模式。$array是SoapServer的属性信息,是一个数组。
    SoapServer对象的addFunction方法是用来声明哪个函数可以被客户端调用,语法格式如下:
    $soap->addFunction($function_name);
    其中,$soap是一个SoapServer对象,$function_name是需要被调用的函数名。
    SoapServer对象的handle方法用来处理用户输入并调用相应的函数,最后返回给客户端处理的结果。语法格式如下:
    $soap->handle([$soap_request]);
    其中,$soap是一个SoapServer对象,$soap_request是一个可选参数,用来表示用户的请求信息。如果不指定$soap_request,则表示服务器将接收用户的全部请求。

    2、SoapCliet
    用于调用远程服务器上的SoapServer页面,并实现了对相应函数的调用。创建一个SoapClient对象的语法格式如下:
    $soap = new SoapClient($wsdl,$array);
    其中,参数$wsdl和$array与SoapServer相同。
    创建SoapClient对象后,调用服务端页面中的函数相当于调用了SoapClient的方法,创建语法如下:
    $soap->user_function($params);
    其中,$soap是一个SoapClient对象,user_function是服务器端要调用的函数,$params 是要传入函数的参数。

    3、SoapFault
    SoapFault用于生成soap访问过程中可能出现的错误。创建一个soapFault对象的语法格式如下:
    $fault = new SoapFault($faultcode,$faultstring);
    其中,$faultcode是用户定义的错误代码,$faultstring是用户自定义的错误信息。soapFault 对象会在服务器端页面出现错误时自动生成,或者通过用户自行创建SoapFault对象时生成。对于 Soap访问时出现的错误,客户端可通过捕捉SoapFalut对象来获得相应的错误信息。
    在客户端捕获SoapFault对象后,可以通过下面的代码获得错误代码和错误信息:
    $fault->faultcode;//错误代码
    $fault->faultstring;//错误信息
    其中,$fault是在前面创建的SoapFault对象。

    示例:

    文件 soapfunc.php:
    <?
    /* 几个供client端调用的函数 */

    function reverse($str)
    {
      $retval='';
      if(strlen($str)<1)
      {
        return new SoapFault('Client','','Invalid string');
      }
      for($i=1; $i<=strlen($str); $i++)
      {
        $retval .= $str[(strlen($str)-$i)];
      }
      return $retval;
    }

    function add2numbers($num1, $num2)
    {
      if(trim($num1) != intval($num1))
      {
        return new SoapFault('Client','','The first number is invalid');
      }
      if(trim($num2) != intval($num2))
      {
        return new SoapFault('Client','','The second number is invalid');
      }
      return ($num1+$num2);
    }

    function gettime()
    {
      $time = date('Y-m-d H:i:s',time());
      return $time;
    }
    ?>

    文件 soapclsoapserverient.php 内容:

    <?
      //先创建一个SoapServer对象实例,然后将我们要暴露的函数注册,
      //最后的handle()用来处理接受的soap请求
      include_once('soapfunc.php');

      error_reporting(7); //正式发布时,设为 0
      date_default_timezone_set('PRC'); //设置时区

      $soap = new SoapServer(null, array('uri'=>"httr://test-rui"));
      $soap->addFunction('reverse');
      $soap->addFunction('add2numbers');
      $soap->addFunction('gettime');
      $soap->addFunction(SOAP_FUNCTIONS_ALL);
      $soap->handle();
    ?>

    文件 soapclient.php 内容:

    <?
      error_reporting(7);
      try
      {
        $client = new SoapClient(null, array('location'=>"http://localhost:8080/_myPHP5/soap/soapserver.php", 'uri'=>"http://test-uri"));

        $str="This string will be reversed";
        $reversed = $client->reverse($str);
        echo "if you reverse '$str', you will get '$reversed'";

        $n1 = 20;
        $n2 = 33;
        $sum = $client->add2numbers($n1,$n2);
        echo "<br>";
        echo "if you try $n1 + $n2, you will get $sum";

        echo "<br>";
        echo "The remoye system time is: ".$client->gettime();
      }
      catch(SoapFault $fault)
      {
        echo "Fault! code:" . $fault->faultcode . " string:" . $fault->faultstring;
      }
    ?>

    作者:张庆(网眼) 西安 PHP 教育培训中心 2010-7-11
    来自“网眼视界”:http://blog.why100000.com
    作者微博:http://t.qq.com/zhangking
    “十万个为什么”电脑学习网:http://www.why100000.com
分享到:
评论

相关推荐

    thinkphp下使用soap

    thinkphp内使用soap 把下载的soap解压放到ThinkPHP\Extend\Vendor目录下 名字是soap 调用方法: function test($url,$method,$data){ vendor('soap.class#nusoap'); //从soap目录导class.nusoap.php类文件 $...

    PHP的soapDemo

    测试了PHP的soap使用方法,经测试可以使用

    PHP使用SOAP调用WEBSERVICE接口

    PHP使用SOAP调用WEBSERVICE接口

    php soap实例

    php soap实例 php soap实例 php soap实例 php soap实例

    soap.so linux下php驱动包

    soap.so linux下php驱动包 ,有些人无法打包,官方也没有提供下载。可以通过本地编译。 SOAP扩展 进入安装原php的源码目录, cd ext cd soap phpize ./configure --with-php-config=/var/php/bin/php-config (一定要...

    php、C++使用Soap一例

    Server用php5 soap扩展实现,以soap数组返回A股行情数据。中文用UTF8编码。Client用GCC+wxWidgets2.8+gsoap2.7,IDE: CodeBlocks。通过gsoap生成代理类接收数据。

    PHP SOAP解决Could not connect to host

    PHP webservice SOAP解决Could not connect to host

    php soap操作实例

    php soap 这是soap技术,用来做api来,这也是经典的做法。

    php-soap 扩展源文件

    PHP的SOAP扩展可以用来提供和使用Web services。换句话说,PHP开发者可以利用这个PHP扩展来写他们自己的Web services,也可以写一些客户端来使用给定的Web services。

    PHP -soap接口服务器

    采用php soap扩展编写,可将内部接口整理后, 自写义对外转换接口 使用http与soap 可保存调用日志 与错误信息 soap调用第三方接口并处理 按自已规范统一返回数据 http 对外调用自已处理好的数据接口

    php-soap(web,server)

    This extension will allow you to create soap servers and soap clients using php scripting language.

    php soap client

    php soapclient 访问java service server

    PHP webservice教程,soap wsdl密码验证,webservice高级应用

    PHP webservice教程,soap wsdl密码验证,webservice高级应用; 好用一定要给好评哦

    PHP 中应用 SOAP例子

    里面是在PHP中怎么样用SOAP来做的WEB SERVICES 例子应用,很适用的。

    php soap 实例

    php soap 实例 SOAP 是基于XML和HTTP通讯协议,XML各个平台,各种语言都支持的一种语言。 不同语言之间需要通信(例如:php,java,c),可以通过SOAP,WSDL使不同操作系统,不同技术的编程语言互相通信。

    PHP SOAP http post get 函数

    利用php curl 实现http post get 包括 SOAP 的发送的函数。 函数包括解决Cookie问题。 实用强大的函数,有了这个函数,做采集或者模拟登陆都很轻松了!

    PHP SOAP实现Web Services 完整实例WSDL服务端+客户端

    PHP实现的Web Services 完整...PHP.INI,请开启php_soap。 服务端:直接解压到网站根目录下,访问地址:http://localhost/hbj/wsdl.php?wsdl 客户端:http://localhost/hbj/Client.php ,显示hello world.表示成功。

    PHP-soap接口服务器

    采用php soap扩展编写,可将内部接口整理后, 自写义对外转换接口

    PHP中soap的用法实例

    本文实例讲述了PHP中soap的用法,分享给大家供大家参考。具体用法分析如下: PHP 使用soap有两种方式。 一、用wsdl文件 服务器端: 复制代码 代码如下:&lt;?php class service {  public function HelloWorld()  {...

    一个支持SOAP11和12规范的PHP客户端

    一个支持SOAP 1.1和1.2规范的PHP客户端

Global site tag (gtag.js) - Google Analytics