构建新型的基于PHP5.0的Web服务

本文介绍如何使用PHP5构建SOAP客户端和服务器端,包括创建PHP SOAP服务器和客户端的具体步骤及示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇根据 NuSoap改造过来的

许多机构已经采用了Apach和PHP作为他们的Web应用环境。在Web services模式中采用PHP可能看上去可能会比较难。但是事实上,你可以轻松的应用PHP5.0构建SOAP的客户端和服务器端。

什么是 PHP?  PHP:Hypertext Preprocessor(超文本预处理器,PHP)是一种流行的服务器端脚本语言,用于创建动态 Web 内容。PHP 解释器为主流平台提供了源代码或者编译好的二进制文件,这些平台包括大多数 Linux? 版本、Windows?、Mac OS X 和 iSeries?。

  确实有数百万台 Web 服务器正在运行 PHP,其中大部分使用的是 PHP 4。2004 年 7 月推出的 PHP 5 正在逐渐被采用。PHP 5 改进了对象模型,底层的内存管理也从多线程和性能的角度重新作了设计。但是需要注意少数无法向后兼容的修改,PHP 手册中对这些进行了记录。
什么是 Web 服务技术?  Web 服务指的是自成体系的、模块化的应用程序,客户机和服务在这种应用程序中是松耦合的。关于 Web 服务的详细信息,对于本文来说,您只需要了解其中的主要技术:

  SOAP(简单对象访问协议)定义了客户机与服务器之间传递的消息。消息采用 XML 格式。SOAP 独立于平台、编程语言、网络和传输层。本文将讨论 HTTP 上的 SOAP。

  WSDL(Web 服务描述语言)是用于描述 Web 服务的基于 XML 的语言,描述内容包括服务的位置、格式、操作、参数和数据类型。

  UDDI(统一描述、发现和集成)是用 API 和 UDDI Registry 实现来提供在网络上存储和检索 Web 服务信息的方法。

  本文包括 SOAP 消息和 WSDL 文档的一些例子,但没有提供 UDDI 的例子。

  XMethods 网站是一个有用的 Web 服务工具,在那里可以找到在各种服务器平台上实现的可公开使用的 Web 服务的列表。可以使用本文中的例子很方便地访问从 XMethods 中选择的服务

SOAP 和 PHP  有多种产品允许在 PHP 4 脚本中使用 SOAP,最常见的产品是 PEAR::SOAP 和 NuSOAP。在写这篇文章的时候,这些产品在与 PHP 5 的兼容方面还存在问题,估计很快就会升级。

  PHP 5 中新增了内置的 SOAP 扩展,我们称之为 ext/soap。它是作为 PHP 的一部分提供的,因此不需要下载、安装和管理单独的包。这是第一个用 C 而不是 PHP 为 PHP 编写的 SOAP 实现,因此作者声称它的速度要快得多。

  因为新的扩展是 PHP 的完整组成部分之一,相关文档包含在 PHP 手册的 Function Reference 部分。SOAP 参考是以一个重要的免责声明开始的:

  警告:该扩展是试验性的(EXPERIMENTAL)。本扩展的行为,包括关于本扩展的函数名和其他内容,在以后的 PHP 版本中随时可能改变,不另行通知。使用该扩展的风险自负。

  警告看起来有点让人担心,但实际上这个扩展似乎得到了很好的支持。和任何新代码一样,该扩展也存在缺陷,但是报告的问题通常很快就能得到修正。在 PHP 站点上可以看到缺陷列表。我们估计,在将来的 PHP 版本中,该扩展将从试验性功能转为主流功能。
安装 PHP SOAP 扩展

在 Windows 上,只要在;extension=php_zip.dll这行后面增加extension=php_soap.dll 这样一行就行了

最后,ext/soap 在 php.ini 中有自己的配置部分,在完成配置之后,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="D:/WEB/php/soap_temp"
; (time to live) Sets the number of second while cached file will be used
; instead of original one.
soap.wsdl_cache_ttl=86400

一个例子便能说明一切,让我们先看一个例子为了说明如何应用PHP5.0来构建Web services,我们将举一个简单的例子。这个例子应用程序由一个PHP Web services的服务器端和客户端组成。他将实现两个功能:颠倒一个字符串字符的顺序,求两个数的和

PHP SOAP服务器用PHP5.0来建立SOAP服务器非常容易。基本上,你只要写出你想要暴露给你的Web services的函数,然后去注册它们就可以了。

OK,另外还需要两步才能完成PHP SOAP服务器的建立。首先你还要在你的PHP代码中创建Soap对象的一个实例,然后用HTTP POST方法将原始数据传给Soap进行处理。听起来简单吧。

先看看清单1

soapfunc.php

//soapfunc.php
function reverse($str){
$retval = "";
if(strlen($str) < 1) {
return new SoapFault(''Client'','''',''Invalid string''); // it is possible to use PHP exception mechanism to throw SOAP Fault


}
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);
}
?>
清单1给出了soapfunc.php的源文件。这个文件包含了我们想通过SOAP协议暴露给Web services的两个函数:reverse和add2numbers,它们是我们这个Web services 应用的核心。函数reverse带一个参数,颠倒字符串中的字符的顺序,然后返回

清单2:soapserver.php

//soapserver.php
include_once(''soapfunc.php'');
$server = new SoapServer(null, array(''uri'' => "http://test-uri/"));//the creation of SoapServer objects in WSDL or non-WSDL mode


$server->addFunction(''reverse'');//Exports one or more functions for remote clients


$server->addFunction(''add2numbers'');//Exports one or more functions for remote clients


$server->handle();//Processes a soap request, calls necessary functions, and sends a response back. The soap request. If this argument is omitted, the request is supposed to be in the $HTTP_RAW_POST_DATA PHP variable.
?>

清单2举例说明了addFunction函数和调用SOAP处理程序的用法。你看到了,注册你的两个函数(在soapfunc.php中)、传递POST数据给SoapServer对象,就跟创建一个新的SoapServer对象实例一样的简单。SoapServer对象将要检查POST数据并确定将调用哪个函数,然后向这个PHP函数传递参数。从PHP函数返回的数据被重新包装为SOAP响应并传送给请求服务的SOAP客户端。

PHP SOAP客户端现在我们已经利用PHP5.0创建了一个SOAP服务器,我们需要对它进行测试。像我们建立SOAP服务器程序一样,我们可以在PHP中再建立一个SOAP的客户端程序。清单3给出了PHP SOAP客户端程序的源程序。

现在我们已经利用PHP5.0创建了一个SOAP服务器,我们需要对它进行测试。像我们建立SOAP服务器程序一样,我们可以再建立一个SOAP的客户端程序。清单3给出了PHP SOAP客户端程序的源程序。

清单3:soapclient.php

//include(''nusoap.php'');
$client = new SoapClient(null, array(''location'' => "http://test.dev.asp/soapserver.php",
''uri'' => "http://test-uri/"));

$str = "This string will be reversed";
$params1 = array(''str''=>$str);
$reversed = $client->__soapCall(''reverse'',$params1);
echo "If you reverse ''$str'', you get ''$reversed''
n";

$n1 = 5;
$n2 = 14;
$params2 = array(''num1''=>$n1, ''num2''=>$n2);
$added = $client->__soapCall(''add2numbers'', $params2);
echo "If you add $n1 and $n2 you get $added
n";
?>

为了在一个SOAP服务器上能使用PHP客户端程序,你还得做三件事情。第一,你要创建一个SoapClient对象。SoapClient对象负责处理参数的编组和SOAP协议。SoapClient需要一个必须是URL的参数。这个URL可以指向一个实际SOAP服务器的HTTP终端或者一个WSDL描述。在我们这个例子里,它是指向我们的PHP SOAP服务器的一个URL。

当调用需要参数的函数时,你需要先创建一个参数数组,数组包括一组键-值(key-value)对。键(key)是参数的名字,值(value)是参数的值。

当需要调用函数时,你就用SoapClient对象去调用函数__soapCall,并且传入两个参数。第一个参数是你要调用的函数的名字,第二个参数是包含SOAP函数所带参数的一个数组,主调函数将会返回你调用的SOAP函数的值。

要运行这个例子,只要简单的在Web浏览器中输入soapclient.php的URL。你将类似以下的输出:

If you reverse ''This string will be reversed'', you get ''desrever eb lliw gnirts sihT'' If you add 5 and 14 you get 19

如果对函数不懂的话,可以去查阅php5.0的手册。本文在php5.0编译通过。有关使用WSDL描述的使用正在学习中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值