您的位置:首页 > 编程语言 > PHP开发

PHP soap拓展的使用——转载

2012-04-28 17:27 225 查看
SOAP

1. Simple Object Access Protocol 简单对象访问协议

主要包括下面四部分:

a) SOAP 封装: 用于将传输数据中的内容, 发送端消息, 接收端信息和处理方式等信息封装起来以准备数据传输.

b) SOAP 编码规则: 用于表示传输数据中各项的数据类型等信息

c) SOAP 远程过程调用协定: 用于进行远程过程调用及应答的协议

d) SOAP 绑定协议: 用于表示信息交换的底层协议

Ø PHP5 中SOAP 应用及配置

=========================================================================

1. PHP 5 中新增了内置的 SOAP 扩展,我们称之为 ext/soap 。它是作为 PHP 的一部分提供的,因此不需要下载、安装和管理单独的包。

2. ext/soap 可能已经编译但没有加载,因此需要更新 PHP 配置,以便加载 ext/soap 。编辑 php.ini 并找到
Dynamic Extensions 部分,在这里增加一行代码来自动加载该扩展。 在 Windows
上,这一代码行是:extension=php_soap.dll

如果以前没有加载过任何可选的扩展,可能还要设置 extension_dir 指令,让它指向包含扩展库(其中包括 php_soap )的目录:

extension_dir=”C:/php/ext/” (在 Windows 上使用正斜杠)

3. 完成配置后ext/soap 显示为:

[soap]

; Enables or disables WSDL caching feature.

soap.wsdl_cache_enabled=1

; Sets the directory name where SOAP extension will put cache files.

soap.wsdl_cache_dir=”/tmp”

; (time to live) Sets the number of second while cached file will be used

; instead of original one.

soap.wsdl_cache_ttl=86400

这段配置控制了 SOAP 扩展的 WSDL 缓存特性。默认情况下,WSDL 描述文件在 24 小时(86400 秒)内都缓存在 /tmp
目录下。现在要设置 soap.wsdl_cache_enabled=0
,否则,在开发代码时,您会遇到一些莫名其妙的行为。完成开发之后,要记得打开 WSDL 缓存 ,使代码运行得更快。

========================================================================

SOAP 扩展库( 主要包括三种对象)

1. SoapServer : 用于在创建PHP 服务端页面时定义可被调用的函数及返回响应数据.

格式为: $soap =new SoapServer($wsdl, $array);

说明:$wsdl 为SOAP 使用的WSDL 文件, 是描述WebService 的一种标准格式. 设为NULL 表示不使用WSDL 模式. 如果想用的话可以用ZED 生成.

$array 是SoapServer 的属性信息, 是一个数组.

注意 :$array 中包括一个uri, 和encoding, 如果是客户端程序中还要包含一个location.

其中’uri ‘ 选项是必须的 ,但其值可以随便填 ,可以为空(”), 但不可以为null .

‘encoding ‘ 对于中文的处理,是必须的,一般填’gb2312′ ( 否则会出错, 因为默认为’utf-8′ ).

该对象的addFunction 方法用来声明哪个函数可以被客户端调用,

语法格式为:$soap -> addFunction($function_name);

该对象的handle 方法用来处理用户的输入并调用相应的函数, 最后返回给客户端处理后的结果,

语法格式为:$soap -> handle([$soap_request]);

说明:$soap_request 是一个可选参数, 用来表示用户的请求信息, 如果不指定, 则表示服务器将接收用户的全部请求 .

2. SoapClient : 用于调用远程服务器上的SoapServer 页面, 并实现了对相应函数的调用.

语法格式为:$soap =new SoapClient($wsdl, $array);

注意 : 对于soap client,’location ‘ 和’uri’ 选项都是必须的 ; 其中’location ‘ 必须为soap
server 的URL , 必须准确, 但uri 似乎可以随便填,不过最好与soap server 中的uri 一致. 而’encoding ‘
对于中文用户是必须的

创建该对象后, 调用服务器页面中的函数相当于调用SoapClient 的方法

语法格式为:$soap -> user_function($params);

说明:user_function 是服务器端定义的可以被调用中的函数中的一个或几个函数.

3. SoapFault : 用于生成在SOAP 访问过程中可能出现的错误.

语法格式为:$fault =new SoapFault($faultcode, $faultstring);

说明:$faultcode 是用户自定义的错误代码, 如果没有定义的话应该是HTTP( 印象中),$faultstring 是用户自定义的错误信息.

该对象会在服务器端页面出现错误时自动生成, 或者通过用户自行创建SoatFault 对象来获得相应的错误信息.

在客户端捕获SoapFault 对象后, 可以通过下面的代码获得错误代码的错误信息

$fault -> faultcode; // 错误代码

$fault -> faultstring; // 错误信息

下面的例子:

soapserver.php

view sourceprint?

01.
<?php

02.

03.
function
reserve(
$arr
){

04.
return
http_build_query(
$arr
);

05.
}

06.

07.
$soap
=
new
SoapServer(NULL,
array
(
'uri'
=>
'http://www.xhbin.com'
));

08.

09.
//为对象添加一个用户自定义的函数

10.
$soap
->addFunction(
'reserve'
);

11.

12.
$soap
->handle();

13.
?>


soapclient.php

view sourceprint?

01.
<?php

02.

03.
try{

04.

05.
$client
=
new
SoapClient(NULL,
array
(
'location'
=>
'http://localhost/exercise/soap/soapserver.php'
,
'uri'
=>
'http://www.xhbin.com'
));

06.

07.
$arr
=
array
(
'id'
=>3,
"tag"
=>
"PHP MYSQL"
,
"search"
=>
"soap"
);

08.

09.
echo
$string
=
$client
->reserve(
$arr
);

10.

11.
}catch(SoapFault
$fault
){

12.

13.
echo
"FAULT!Code:"
.
$fault
->faultcode.
"String:"
.
$fault
->faultstring;

14.

15.
}

16.

17.
?>


输出的结果为:id=3&tag=PHP+MYSQL&search=soap.

成功。。。

原文出处:http://blog.xhbin.com/archives/938
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: