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的soap使用方法,经测试可以使用
PHP使用SOAP调用WEBSERVICE接口
php soap实例 php soap实例 php soap实例 php soap实例
soap.so linux下php驱动包 ,有些人无法打包,官方也没有提供下载。可以通过本地编译。 SOAP扩展 进入安装原php的源码目录, cd ext cd soap phpize ./configure --with-php-config=/var/php/bin/php-config (一定要...
Server用php5 soap扩展实现,以soap数组返回A股行情数据。中文用UTF8编码。Client用GCC+wxWidgets2.8+gsoap2.7,IDE: CodeBlocks。通过gsoap生成代理类接收数据。
PHP webservice SOAP解决Could not connect to host
php soap 这是soap技术,用来做api来,这也是经典的做法。
PHP的SOAP扩展可以用来提供和使用Web services。换句话说,PHP开发者可以利用这个PHP扩展来写他们自己的Web services,也可以写一些客户端来使用给定的Web services。
采用php soap扩展编写,可将内部接口整理后, 自写义对外转换接口 使用http与soap 可保存调用日志 与错误信息 soap调用第三方接口并处理 按自已规范统一返回数据 http 对外调用自已处理好的数据接口
This extension will allow you to create soap servers and soap clients using php scripting language.
php soapclient 访问java service server
PHP webservice教程,soap wsdl密码验证,webservice高级应用; 好用一定要给好评哦
里面是在PHP中怎么样用SOAP来做的WEB SERVICES 例子应用,很适用的。
php soap 实例 SOAP 是基于XML和HTTP通讯协议,XML各个平台,各种语言都支持的一种语言。 不同语言之间需要通信(例如:php,java,c),可以通过SOAP,WSDL使不同操作系统,不同技术的编程语言互相通信。
利用php curl 实现http post get 包括 SOAP 的发送的函数。 函数包括解决Cookie问题。 实用强大的函数,有了这个函数,做采集或者模拟登陆都很轻松了!
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有两种方式。 一、用wsdl文件 服务器端: 复制代码 代码如下:<?php class service { public function HelloWorld() {...
一个支持SOAP 1.1和1.2规范的PHP客户端