php soap 中文,php soap 开发文档

一. 必备知识

1.wsdl(web服务标记语言)

WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。

具体参考请访问下面网址

2.soap

SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息。

具体参考请访问下面网址

3.php扩展

具体参考请访问下面网址

二. php soap开发模式

1. working in swdl mode(契约先行(Contract first)模式)

契约先行模式使用了一个用XML定义的服务接口的WSDL文件。WSDL文件定义了服务必须实现或客户端必须使用的接口。SoapServer和SoapClient的WSDL模式就基于这个概念。也就是用soap通讯的时候必须先有一个定义过的服务接口,才能进行通讯。

2. working in non-swdl mode(代码先行(Code first)模式)

在代码先行模式中,首先要先写出实现服务的代码。然后在大多数情况下,代码会产生一个契约,换种说法,一个WSDL。接着客户端在使用服务的时候就可以使用那个WSDL来获得服务的接口。尽管如此,PHP5的扩展并没有从代码输出一个WSDL的规定,考虑到这种情况,可以在non-WSDL模式下使用 SoapServer和SoapClient。也就是说在soap通讯的时候并不需要一个预先定义过的服务接口,代码会自动的产生。

三.参考例子:

下面介绍如何使用WSDL模式和non-WSDL模式来实现服务和客户端。相对而言,使用WSDL模式来实现服务和客户端会比较容易。

1. noWSDL模式实现

服务端 server.php

class test

{

/**

*

* @return string

*/

function show()

{

return 'hello world!';

}

}

#####################################################

$server = new SoapServer(null, array('uri' => "http://test-uri/"));

$server->setClass('test');

$server->handle();

?>

客户端 client.php

$soap=new SoapClient(null, array(

'location' =>'http://soapserver_url/server.php',

print_r($soap->__getFunctions());

echo $soap->show();

?>

2. WSDL模式实现

第一步:编写服务端类文件

class..php

class test

{

/**

*

* @return string

*/

function show()

{

return 'hello world!';

}

}

?>

第二步:将类文件生成 wsdl文件server.wsdl。

由于wsdl文件编写比较复杂,所以我们用第三方工具生成。我们以zend studio为例子演示:

Tools ==> WSDL Generator ==> Configration name : test; WSDL file name: server

==>NEXT ==> 点击 + ==> 选择上面的创建的class.php ==> 这时候会看到一个 classes?? : URL Location的映射,保留 test类前面的勾,并将其url 设置为 SOAP Server的url:http://soapserver_url/server.php ==>点击Finish,ZDE就会创建一个非常漂亮的WSDL了?? 工作基本上完成了.

第三步:服务端编写:

require ' class..php ';  //引入类文件

$server = new SoapServer('server.wsdl');

$server->setClass('test');

$server->handle();

?>

第四步:客户端编写

$soap = new SoapClient('http:// soapserver_url/server.wsdl');

print_r($soap->__getFunctions());

echo $soap->show();

以上两个例子只是一个简单的soap服务编写,已经可以满足大部分需要。如果需要更加高级的功能请参考其他方面的资料。

三. 出现的问题。

1.在方法中对属性的赋值在其他方法中不起作用。

比如在客户端调用服务端某个方法对某个属性赋值。

在其他方法里就不能用。但在 __construct 方法中对属性的赋值是可以个在其他方法中使用的。

2. 提示 Client] looks like we got no XML document错误。

服务器端文件在<?php ?> 标签前后都不要有任何数据包括空格,空行。

3. Warning: SoapClient::SoapClient(): I/O warning : failed to load external entity

原因如下:PHP程序作为 SOAP客户端 采用 WSDL 模式访问远端服务器的时候,PHP是通过调用 libcurl 实现的。至少在 PHP5.2.X 是这样的。如果采用 non-WSDL 模式,就不需要 libcurl。在solaris 没有缺省安装 libcurl,也许是我没有安装。除了 了ibcurl以外,至少还关联的库包括:

libidn,ibgcc,libiconv,libintl,openssl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值