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 把下载的soap解压放到ThinkPHP\Extend\Vendor目录下 名字是soap 调用方法: function test($url,$method,$data){ vendor('soap.class#nusoap'); //从soap目录导class.nusoap.php类文件 $...
通过"PHP的soapDemo",你可以学习如何在PHP环境中设置和使用SOAP服务,这将帮助你理解Web服务的原理,并提升在分布式系统中的开发能力。这个项目提供了一个实际操作的起点,你可以在此基础上扩展和定制自己的SOAP...
在PHP中,我们可以使用SoapClient类来创建SOAP客户端。这个类允许我们连接到SOAP服务器并调用其提供的方法。例如,假设有一个名为`MyService`的SOAP服务,提供了一个`calculate`方法,我们可以通过以下方式调用: `...
在PHP中,我们可以使用SoapServer类来创建SOAP服务。以下是一般步骤: 1. **定义业务逻辑函数**:这些函数将被SOAP客户端调用,实现实际的数据处理。 2. **实例化SoapServer**:创建一个SoapServer对象,并将业务...
在PHP中,可以使用SoapServer类来创建SOAP服务器。首先,你需要定义一个处理请求的函数,然后实例化SoapServer对象,并将这个函数作为参数传入。最后,通过 SoapServer 的 handle 方法接收并处理请求。例如: ```...
在这个DEMO中,我们将探讨PHP与SOAP的交互,以及如何创建和使用SOAP服务。 首先,我们需要了解SOAP的基本概念。SOAP是基于XML的,允许应用程序通过HTTP、HTTPS等传输协议进行通信。它定义了一种标准的消息格式,...
在PHP中使用SOAP进行Web服务开发,不仅可以实现跨平台、跨语言的数据交换,还可以让服务更易于集成和扩展。通过理解SOAP的工作原理,熟练运用`SoapClient`和`SoapServer`类,开发者可以构建出强大的分布式系统。在...
在IT行业中,PHP是一种广泛应用的服务器端脚本语言,尤其在Web开发领域有着广泛的使用。SOAP(Simple Object Access Protocol)是一种轻量级的、基于XML的协议,用于在Web服务中进行信息交换。PHP的SOAP扩展允许...
`actor`参数则用于指定哪些角色应处理此SOAP头,这涉及到SOAP消息路由的概念,通常在更复杂的Web服务交互中使用。 总的来说,PHP的SOAP功能允许开发者轻松地集成跨平台的Web服务,同时提供了一套完整的工具来处理...
在PHP中,我们可以使用SoapClient和SoapServer类来处理SOAP请求和响应。例如,使用SoapClient与远程Web服务进行交互,而SoapServer则用于创建和运行本地的SOAP服务。 WSDL则是用来描述Web服务的接口,它定义了服务...
PHP使用SOAP调用WEBSERVICE接口
soap.so linux下php驱动包 ,有些人无法打包,官方也没有提供下载。可以通过本地编译。 SOAP扩展 进入安装原php的源码目录, cd ext cd soap phpize ./configure --with-php-config=/var/php/bin/php-config (一定要...
PHP webservice SOAP解决Could not connect to host
Server用php5 soap扩展实现,以soap数组返回A股行情数据。中文用UTF8编码。Client用GCC+wxWidgets2.8+gsoap2.7,IDE: CodeBlocks。通过gsoap生成代理类接收数据。
在PHP中,通常使用HTTP作为默认的SOAP绑定。 3. WSDL(Web Services Description Language):WSDL是一种XML格式,用于描述SOAP服务的接口,包括服务的位置、操作、输入/输出消息格式等。它为客户端提供了如何调用...
标题中的“一个支持SOAP11和12规范的PHP客户端”指的是一个PHP开发的软件工具,它能够处理基于SOAP(Simple Object Access Protocol)1.1和1.2版本的Web服务请求。SOAP是一种用于交换结构化和类型化的信息的协议,常...
PHP的SOAP扩展可以用来提供和使用Web services。换句话说,PHP开发者可以利用这个PHP扩展来写他们自己的Web services,也可以写一些客户端来使用给定的Web services。
1. **安装SOAP库**:由于CodeIgniter默认并不包含SOAP类,我们需要首先安装PHP的SOAP扩展。在大多数服务器环境中,这通常是预装的。如果尚未安装,可以通过修改php.ini文件或使用Composer来添加。 2. **创建SOAP...
要在Laravel项目中使用`laravel-soap`,首先需要通过Composer来安装: ``` composer require nesbot/carbon composer require wsscgi/laravel-soap ``` 然后,在`config/app.php`中注册服务提供者并发布配置文件: `...
采用php soap扩展编写,可将内部接口整理后, 自写义对外转换接口 使用http与soap 可保存调用日志 与错误信息 soap调用第三方接口并处理 按自已规范统一返回数据 http 对外调用自已处理好的数据接口