`
yushine
  • 浏览: 201472 次
  • 性别: 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的soapDemo",你可以学习如何在PHP环境中设置和使用SOAP服务,这将帮助你理解Web服务的原理,并提升在分布式系统中的开发能力。这个项目提供了一个实际操作的起点,你可以在此基础上扩展和定制自己的SOAP...

    php soap操作实例

    在PHP中,我们可以使用SoapClient类来创建SOAP客户端。这个类允许我们连接到SOAP服务器并调用其提供的方法。例如,假设有一个名为`MyService`的SOAP服务,提供了一个`calculate`方法,我们可以通过以下方式调用: `...

    php编写webservice soap服务端及客户端

    在PHP中,我们可以使用SoapServer类来创建SOAP服务。以下是一般步骤: 1. **定义业务逻辑函数**:这些函数将被SOAP客户端调用,实现实际的数据处理。 2. **实例化SoapServer**:创建一个SoapServer对象,并将业务...

    php-soap(web,server)

    在PHP中,可以使用SoapServer类来创建SOAP服务器。首先,你需要定义一个处理请求的函数,然后实例化SoapServer对象,并将这个函数作为参数传入。最后,通过 SoapServer 的 handle 方法接收并处理请求。例如: ```...

    PHP SOAP DEMO

    在这个DEMO中,我们将探讨PHP与SOAP的交互,以及如何创建和使用SOAP服务。 首先,我们需要了解SOAP的基本概念。SOAP是基于XML的,允许应用程序通过HTTP、HTTPS等传输协议进行通信。它定义了一种标准的消息格式,...

    PHP 中应用 SOAP例子

    在PHP中使用SOAP进行Web服务开发,不仅可以实现跨平台、跨语言的数据交换,还可以让服务更易于集成和扩展。通过理解SOAP的工作原理,熟练运用`SoapClient`和`SoapServer`类,开发者可以构建出强大的分布式系统。在...

    PHP-soap接口服务器

    在IT行业中,PHP是一种广泛应用的服务器端脚本语言,尤其在Web开发领域有着广泛的使用。SOAP(Simple Object Access Protocol)是一种轻量级的、基于XML的协议,用于在Web服务中进行信息交换。PHP的SOAP扩展允许...

    php soap实例

    `actor`参数则用于指定哪些角色应处理此SOAP头,这涉及到SOAP消息路由的概念,通常在更复杂的Web服务交互中使用。 总的来说,PHP的SOAP功能允许开发者轻松地集成跨平台的Web服务,同时提供了一套完整的工具来处理...

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

    在PHP中,我们可以使用SoapClient和SoapServer类来处理SOAP请求和响应。例如,使用SoapClient与远程Web服务进行交互,而SoapServer则用于创建和运行本地的SOAP服务。 WSDL则是用来描述Web服务的接口,它定义了服务...

    PHP使用SOAP调用WEBSERVICE接口

    PHP使用SOAP调用WEBSERVICE接口

    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 SOAP解决Could not connect to host

    PHP webservice SOAP解决Could not connect to host

    php、C++使用Soap一例

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

    php+soap通信

    在PHP中,通常使用HTTP作为默认的SOAP绑定。 3. WSDL(Web Services Description Language):WSDL是一种XML格式,用于描述SOAP服务的接口,包括服务的位置、操作、输入/输出消息格式等。它为客户端提供了如何调用...

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

    标题中的“一个支持SOAP11和12规范的PHP客户端”指的是一个PHP开发的软件工具,它能够处理基于SOAP(Simple Object Access Protocol)1.1和1.2版本的Web服务请求。SOAP是一种用于交换结构化和类型化的信息的协议,常...

    php-soap 扩展源文件

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

    CodeIgniter集成SOAP功能

    1. **安装SOAP库**:由于CodeIgniter默认并不包含SOAP类,我们需要首先安装PHP的SOAP扩展。在大多数服务器环境中,这通常是预装的。如果尚未安装,可以通过修改php.ini文件或使用Composer来添加。 2. **创建SOAP...

    Laravel开发-laravel-soap Soap 协议客户端

    要在Laravel项目中使用`laravel-soap`,首先需要通过Composer来安装: ``` composer require nesbot/carbon composer require wsscgi/laravel-soap ``` 然后,在`config/app.php`中注册服务提供者并发布配置文件: `...

    PHP -soap接口服务器

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

Global site tag (gtag.js) - Google Analytics