- 浏览: 200577 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
guji528:
使用Python通过正则表达式替换很方便:
sprin ...
Python正则表达式指南 -
guji528:
很实用,先keep再看
Python正则表达式指南 -
yushine:
1,2,3,5 已经做了剩下的本来也正准备做。
2012, 每一个软件工程师必须做的11件事 -
mynetstudy:
用导出不就可以了吗
递归删除SVN工作目录下的.svn目录
简介
PHP的SOAP扩展可以用来提供和使用Web services。换句话说,PHP开发者可以利用这个PHP扩展来写他们自己的Web services,也可以写一些客户端来使用给定的Web services。
PHP5中的这个SOAP扩展目的是为了实现PHP对Web services的支持。与其它实现PHP对Web services的支持的方法不同,SOAP扩展是用C写的,因此它比其它方法具有速度优势。
SOAP扩展支持以下规范。
* SOAP 1.1
* SOAP 1.2
* WSDL 1.1
SOAP扩展主要用来处理RPC形式的Web services。不过,你也可以使用文本形式的WSDL文件配合WSDL模式的服务端和客户端。
这个扩展使用 GNOME XML库来处理XML。
扩展中的类
这个扩展实现了6个类。其中有三个高级的类,它们的方法很有用,它们是 SoapClient,SoapServer和SoapFault。另外三个类除了构造器外没有其它别的方法,这三个是低级的类,它们是SoapHeader,SoapParam和SoapVar。
SoapClient类
这个类用来使用Web services。SoapClient类可以作为给定Web services的客户端。
它有两种操作形式:
* WSDL 模式
* Non-WSDL 模式
在WSDL模式中,构造器可以使用WSDL文件名作为参数,并从WSDL中提取服务所使用的信息。
non-WSDL模式中使用参数来传递要使用的信息。这个类有许多可以用来使用服务的有用的方法。其中SoapClient::__soapCall()是最重要的。这个方法可以用来调用服务中的某个操作。
SoapServer类
这个类可以用来提供Web services。与SoapClient类似,SoapServer也有两种操作模式:WSDL模式和non-WSDL模式。这两种模式的意义跟 SoapClient的两种模式一样。在WSDL模式中,服务实现了WSDL提供的接口;在non-WSDL模式中,参数被用来管理服务的行为。
在SoapServer类的众多方法中,有三个方法比较重要。它们是SoapServer::setClass(),SoapServer::addFunction()和SoapServer::handle()。
SoapServer::setClass()方法设定用来实现Web Service的类。SoapServer::setClass所设定的类中的所有公共方法将成为Web Services的操作(operation)。
SoapServer::addFunction()方法用来添加一个或多个作为Web Services操作(operation)的函数。
SoapServer:: handle()方法指示Web Service脚本开始处理进入的请求。Web Service脚本是用PHP脚本写的一个或多个SoapServer对象的实例。尽管你可以有不止一个的SoapServer对象,但通常的习惯是一个脚本只拥有一个SoapServer实例。在调用SoapServer::handle()方法之前,Web Service脚本会使用设置在SoapServer对象实例上的任何信息来处理进入的请求和输出的相应。
SoapFault类
这个类从Exception类继承而来,可以用来处理错误。SoapFault实例可以抛出或获取Soap错误的相关信息并按程序员的请求处理。
SoapHeader类
这个类可以用来描述SOAP headers。它只是一个只包含构造器方法的数据容器。
SoapParam类
SoapParam也是一个只包含构造器方法的数据容器。这个方法可以用来描述传递给Web services操作的参数。在non-WSDL模式中这是一个很有用的类,可以用来传递所期望格式的参数信息。
SoapVar类
SoapVar也是一个只包含构造器的低级类,与SoapHeader和SoapParam类相似。这个类可以用来给一个Web services操作传递编码参数。这个类对non-WSDL中传递类型信息是非常有用的。
WSDL VS. non-WSDL模式
Web Services有两种实现模式:契约先行(Contract first)模式和代码先行(Code first)模式。
契约先行模式使用了一个用XML定义的服务接口的WSDL文件。WSDL文件定义了服务必须实现或客户端必须使用的接口。SoapServer和SoapClient的WSDL模式就基于这个概念。
在代码先行模式中,首先要先写出实现服务的代码。然后在大多数情况下,代码会产生一个契约,换种说法,一个WSDL。接着客户端在使用服务的时候就可以使用那个WSDL来获得服务的接口。尽管如此,PHP5的扩展并没有从代码输出一个WSDL的规定,考虑到这种情况,可以在non-WSDL模式下使用 SoapServer和SoapClient。
SOAP扩展与Hello World
这一节介绍如何使用WSDL模式和non-WSDL模式来实现服务和客户端。相对而言,使用WSDL模式来实现服务和客户端会比较容易,假定已经有一个定义了接口的WSDL文件。因此这一节会先介绍如何使用WSDL模式实现一个Web Service。
在这个Hello World例子的服务中有一个被命名为greet的操作。这个操作有一个字符串形式的名字并返回一个字符串形式的greeting。所用到的WSDL如下:
<wsdl:definitions
xmlns:impl='http://wso2.org/wsf/php/helloService'
xmlns:intf='http://wso2.org/wsf/php/helloService'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
xmlns:wsdlsoap='http://schemas.xmlsoap.org/wsdl/soap/'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
targetNamespace='http://wso2.org/wsf/php/helloService'>
<wsdl:types>
<schema elementFormDefault='qualified'
xmlns:impl='http://wso2.org/wsf/php/helloService'
xmlns:intf='http://wso2.org/wsf/php/helloService'
xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace='http://wso2.org/wsf/php/helloService' >
<element name='greet'>
<complexType>
<sequence>
<element name='name' type='xsd:string' />
</sequence>
</complexType>
</element>
<element name='greetResponse'>
<complexType>
<sequence>
<element name='greetReturn' type='xsd:string' />
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<wsdl:message name='greetRequest'>
<wsdl:part name='parameters' element='impl:greet' />
</wsdl:message>
<wsdl:message name='greetResponse'>
<wsdl:part name='parameters' element='impl:greetResponse' />
</wsdl:message>
<wsdl:portType name='helloService'>
<wsdl:operation name='greet'>
<wsdl:input name='greetRequest' message='impl:greetRequest' />
<wsdl:output name='greetResponse' message='impl:greetResponse' />
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name='helloServiceSoapBinding' type='impl:helloService'>
<wsdlsoap:binding transport='http://schemas.xmlsoap.org/soap/http' style='document' />
<wsdl:operation name='greet'>
<wsdlsoap:operation soapAction='helloService#greet' />
<wsdl:input name='greetRequest'>
<wsdlsoap:body use='literal' />
</wsdl:input>
<wsdl:output name='greetResponse'>
<wsdlsoap:body use='literal' />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name='helloService'>
<wsdl:port binding='impl:helloServiceSoapBinding' name='helloService'>
<wsdlsoap:address location='http://localhost/hello/hello_service_wsdl.php' />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
WSDL模式服务
下面是WSDL模式的服务所使用的SOAP扩展API代码:
<?php
function greet($param) {
$retval = 'Hello '.$param->name;
$result = array('greetReturn' => $retval);
return $result;
}
$server = new SoapServer('hello.wsdl');
$server->addFunction('greet');
$server->handle();
?>
在这个服务的实现过程中,函数实现了WSDL所定义的服务操作greet,greet操作有一个WSDL指定的参数,按照greet操作的语义,这个参数是一个用户的名字。最后handle调用了触发处理请求的服务对象。
WSDL模式客户端
客户端代码如下
<?php
try {
$client = new SoapClient('hello.wsdl');
$result = $client->__soapCall('greet', array(array('name' => 'Sam')));
printf("Result = %s", $result->greetReturn);
} catch (Exception $e) {
printf("Message = %s",$e->__toString());
}
?>
客户端代码中,首先创建一个使用WSDL文件作参数的SoapClient实例。接着__soapCall()调用作为参数传入它的操作,也就是greet和传入操作的参数。
请求和响应
当你将上述的PHP脚本放在你web服务器目录下的文档中,并利用WEB浏览器或在PHP解析器的命令行调用脚本,客户端发送一个SOAP请求到服务端脚本,服务端将向客户端发送一个SOAP响应来响应客户端的请求。
下面是客户端所发送的SOAP请求:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://wso2.org/wsf/php/helloService">
<SOAP-ENV:Body>
<ns1:greet>
<ns1:name>Sam</ns1:name>
</ns1:greet>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
下面是服务端响应上诉请求而发送的SOAP响应:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://wso2.org/wsf/php/helloService">
<SOAP-ENV:Body>
<ns1:greetResponse>
<ns1:greetReturn>Hello Sam</ns1:greetReturn>
</ns1:greetResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
上面的SOAP消息都是利用WSDL模式的服务端和客户端来获取的。也可以利用non-WSDL模式的服务端和客户端来产生与上面相同的SOAP消息。但是,PHP代码必须有一点改变。下一节会说明如何使用non-WSDL模式。
non-WSDL模式服务端
<?php
function greet($param) {
$retval = 'Hello '.$param;
return new SoapParam($retval, 'greetReturn');
}
$server = new SoapServer(null, array('uri' => 'http://wso2.org/wsf/php/helloService'));
$server->addFunction('greet');
$server->handle();
?>
在non -WSDL模式中,想WSDL模式一样首先实现greet函数的功能,但是函数实现的方式跟WSDL模式稍稍有所不同。在non-WSDL模式中,我们必须返回一个SoapParam对象作为响应,而不是一个数组。创建服务时,第一个参数设为null,说明没有提供WSDL;接着传递一个选项作为参数,这个选项参数是服务的URI。最后像WSDL模式一样调用剩下的方法。
non-WSDL模式客户端
<?php
try {
$client = new SoapClient(null,
array('location' => 'http://localhost/hello/hello_service_nonwsdl.php',
'uri' => 'http://wso2.org/wsf/php/helloService'));
$result = $client->__soapCall('greet', array(new SoapParam('Sam', 'name'))); printf("Result = %s", $result);
} catch (Exception $e) {
printf("Message = %s",$e->__toString());
}
?>
在non-WSDL模式中,因为没有使用WSDL,传递了一个包含服务所在位置和服务URI的参数数组作为参数。然后象WSDL模式中一样调用__soapCall()方法,但是使用了SoapParam类用指定格式打包参数。返回的结果将获取greet中的响应。
结论
这篇文章介绍了SOAP扩展,可以在PHP中通过它来提供和使用Web Services。PHP扩展的强项是它的简单和快速。使用C写的SOAP扩展来运行服务端和客户端是非常简单的。虽然SOAP扩展在处理一些简单的 Web Services时很有用,但是当用它来处理所有的Web Services时就表现出它的局限性。 WSO WSF/PHP就是为了弥补PHP扩展的缺陷而开发的,它是开源的,可以实现SOAP类似的功能并且支持MTOM,WS-Addressing,WS- Security和WS-RelaiableMessaging。WSO2 WSF/PHP 支持与SOAP扩展类似的API。我们正计划将API打包起来提供跟SOAP扩展一样的API,会用C来写。
发表评论
-
Magento模板及布局文件中引用Static Block的方法
2013-03-21 10:25 1287Static Block是Magento提供的非常实用的一种 ... -
PHP ORM框架与简单代码实现
2013-02-18 12:37 1437对象关系映射(Object Relational Mappi ... -
php.ini安全配置详细解释
2013-01-24 11:28 1937PHP本身再老版本有一些问题,比如在 php4.3.10和p ... -
关于PHP学习
2012-11-02 21:54 8161.首先看了PHP的源码API ... -
Zend Framework的DB处理-表关联(转载)
2012-04-24 10:35 1176介绍: 在RDBMS中,表之间有着各种 ... -
浅谈Zend Framework, CodeIgniter与Kohana
2012-04-13 17:11 1240抛砖引玉,这三份框架 我都花了一定的时间精力去了解,根据 ... -
浅谈Zend Framework, CodeIgniter与Kohana
2012-04-13 17:10 14<div id="article_conten ... -
22个开源的PHP框架
2012-02-06 12:40 969http://coolshell.cn/articles/10 ... -
isolated 十个超级有用的PHP代码片段
2012-01-31 15:50 8881. 发送短信 调用 TextMagic API。 // ... -
Drupal 主页定制:定制个性的drupal 主页<front>
2011-11-24 23:48 1062默认主题就是列表格式,像blog一样,一般做企业展示性的网站, ... -
drupal6.x中创建新的主题模版和区域(Regions)
2011-11-24 23:27 15792011-01-02 18:29 ... -
9大最有潜力PHP开源项目:PHP FOR Android开发居首
2011-11-10 11:21 1538PHP的开源世界可谓相当 ... -
Comparing PHP Frameworks ( Symfony, CakePHP, YII and CodeIgniter)
2011-06-30 18:13 1553转自 http://karim-ouda.blogspot.c ... -
A Good PHPer
2011-01-18 16:35 7621.首先看了PHP的源码API函数,对于许多口水仗的争论一笑而 ... -
PHP实现html标签补全
2011-01-18 15:37 1179PHP实现html标签补全 作者:朦朧中的罪惡 | ... -
Comparison of web application frameworks
2011-01-18 15:29 1013From Wikipedia, the free encycl ... -
搭建Eclipse PDT开发CakePHP的环境
2011-01-14 14:20 2671搭建Eclipse PDT开发CakePHP ... -
Developing custom PHP extensions PECL Tutorials 从源程序编译 DLL
2011-01-04 17:34 1803想了很久怎么给这篇文 ... -
国外主流PHP框架比较-CodeIgniter、CakePHP、ZendFramework、Symfony
2010-12-01 13:16 1274最近简单的使用了目前在国内用的比较多的几个主流国外PHP框架( ... -
面向 PHP 5.3 友好的 PHP 开发
2010-10-12 13:57 1211最近 Debian 的 testing 版 ...
相关推荐
PHP的SOAP扩展可以用来提供和使用Web services。换句话说,PHP开发者可以利用这个PHP扩展来写他们自己的Web services,也可以写一些客户端来使用给定的Web services。
1. **安装SOAP库**:由于CodeIgniter默认并不包含SOAP类,我们需要首先安装PHP的SOAP扩展。在大多数服务器环境中,这通常是预装的。如果尚未安装,可以通过修改php.ini文件或使用Composer来添加。 2. **创建SOAP...
采用php soap扩展编写,可将内部接口整理后, 自写义对外转换接口 使用http与soap 可保存调用日志 与错误信息 soap调用第三方接口并处理 按自已规范统一返回数据 http 对外调用自已处理好的数据接口
Yii 2 的 SOAP 客户端扩展请注意,需要 PHP SOAP 扩展。安装安装此扩展的首选方法是通过 。 要么跑 composer require --prefer-dist mongosoft/yii2-soap-client "*"或添加 " mongosoft/yii2-soap-client " : " * " ...
PHP-SOAP扩展详解:构建Web服务的利器 在当今的互联网环境中,Web服务作为一种通信协议,使得应用程序之间能够交换数据并实现功能整合。PHP-SOAP扩展是PHP语言中的一个重要组成部分,它允许开发者创建SOAP(Simple ...
这篇文档很可能是指导开发者如何在PHP 5中使用SOAP扩展来实现这一目标,特别是在涉及到WS-Security协议时,确保通信的安全性。 描述中的“PHP中的SOAP概述”说明了文档会先介绍SOAP(简单对象访问协议)在PHP 5中的...
2. **PHP的SOAP扩展**: PHP内置了对SOAP的支持,通过`SoapClient`和`SoapServer`类来实现SOAP通信。`SoapClient`用于作为SOAP客户端,调用远程Web服务;`SoapServer`用于创建SOAP服务器,处理来自客户端的请求。 ...
综合以上信息,我们可以了解到这个压缩包提供了PHP SOAP扩展的源码,包括了处理SOAP请求和响应的核心函数、HTTP传输、XML解析以及与SOAP协议相关的编码和模式处理。对于开发或者调试基于PHP的SOAP应用程序的开发者来...
5. SOAP扩展的高级特性 PHP SOAP还支持一些高级特性,如WS-Security(用于安全传输)、WS-Addressing(用于消息路由)等。这些特性可以增强SOAP服务的安全性和可靠性。 6. `CreateSoap`文件中的实例 在`CreateSoap`...
SOAP扩展 进入安装原php的源码目录, cd ext cd soap phpize ./configure --with-php-config=/var/php/bin/php-config (一定要有php-config这个文件的路径,不然会报错!) make 就会在PHPDIR/ext/soap/modules/下生成...
PHP通过内置的SOAP扩展可以方便地创建和使用SOAP服务。 首先,我们来探讨一下SOAP和XML-RPC的区别。XML-RPC主要被应用于Web服务发展的初期,是一种简单的远程过程调用协议。它的消息格式单一,只支持有限的数据类型...
PHP的SOAP扩展允许开发者创建和使用SOAP服务,实现不同系统间的互操作性。下面我们将深入探讨PHP如何利用SOAP接口服务器来实现内部接口的对外转换。 一、SOAP接口服务器的理解 SOAP接口服务器是基于SOAP协议构建的...
请注意,需要 PHP SOAP 扩展。 安装 安装此扩展的首选方法是通过 。 要么跑 composer require --prefer-dist mongosoft/yii2-soap-server "*" 或添加 " mongosoft/yii2-soap-server " : " * " 到composer.json...
3. **性能问题**:在处理大型数据集或复杂的数据结构时,PHP SOAP扩展可能会出现性能瓶颈。 针对这些问题,作者提出了改进的方向和建议,以帮助开发者更好地利用PHP SOAP扩展。 #### 四、5...
C:\Users\PC\Downloads\php7.4_ext>dir /b php_bz2.dll php_com_dotnet.dll php_curl.dll php_dba.dll php_enchant.dll php_exif.dll php_ffi.dll php_fileinfo.dll php_ftp.dll php_gd2.dll php_gettext.dll ...
通过PHP的SOAP扩展,我们可以轻松地创建和使用SOAP服务。下面我们将详细讲解服务端和客户端的实现过程。 首先,让我们关注服务端的实现。在提供的压缩包中,`server.php`文件就是服务端的示例。服务端的主要任务是...
为了有效地使用这个PHP客户端,开发者需要熟悉以上知识,并且能够阅读和理解提供的源代码或文档,以便根据项目需求进行配置和扩展。同时,熟悉版本控制工具如Git,以及如何查找和应用特定版本的代码也会很有帮助。
PHP提供了一个内置的SOAP扩展库,允许开发者在PHP中直接进行SOAP操作。使用该扩展,可以通过创建`SoapServer`对象定义可供调用的函数和返回响应,或使用`SoapClient`对象与SOAP服务器进行交互。在启用SOAP扩展后,...
而`laravel-soap`是Laravel的一个扩展包,专门用于处理SOAP(Simple Object Access Protocol)协议,这是一种基于XML的网络通信协议,常用于不同系统间的远程调用和服务交互。 **SOAP协议简介** SOAP是一种轻量级的...