利用PHP创建由Oracle驱动的SOAP服务
2009-01-06 13:10:21 来源:WEB开发网如果 PHP 中的 SOAP 客户端通过 WSDL 文档实例化,就可以使用返回的客户端对象调用在 SOAP 服务器上公开的方法(就好像它们是自带 PHP 调用),并处理任何可能作为原生 PHP 异常发生的 SOAP 错误。例如,返回到原始 math SOAP 服务示例,以下是一个完整的 PHP SOAP 客户端:
< ?php
$client = new SoapClient(“http://www.example.com/math.wsdl”);
try {
$result = $client->div(10,rand(0,5);
// will cause a Soap Fault if divide by zero
print “The answer is: $result”;
} catch(SoapFault $f) {
print “Sorry an error was caught executing your request:
{$e->getMessage()}”;
}
?>
正如您看到的那样,使用 SoapClient 类访问 SOAP 服务(无论它们是否在 PHP 中实施)很简单。实际上,通过 SOAP 服务为您的书籍数据库创建一个基于 Web 的管理系统是件轻而易举的事!如下所示,与让查询接口直接与 SOAP 服务交互相比,开发这个简单查询接口的逻辑和界面明显需要更多的编码工作。 < HTML>
< HEAD>< TITLE>Oracle / SOAP Example by John Coggeshall< /TITLE>< /HEAD>
< BODY>
< ?php
$client = new SoapClient("bookman.wsdl");
try {
switch(@$_GET['mode']) {
case 'title':
if(!empty($_GET['title'])) {
$isbns = $client->findBookISBNByTitle($_GET['title']);
} else {
print "< B>Error:< /B> You must specify at a title fragment!BR/>";
}
break;
case 'author':
if(!empty($_GET['author'])) {
$isbns = $client->findBookISBNByAuthor($_GET['author']);
} else {
print "< B>Error:< /B> You must specify the author to search!< BR/>";
}
break;
default:
$isbns = $client->listAllBooks();
}
print "< TABLE WIDTH='600'>< TR>< TD>ISBN< /TD>< TD>Author< /TD>";
print "< TD>Title< /TD>< TD>Price< /TD>< /TR>";
if(!isset($isbns) || !is_array($isbns)) {
print "< TR>< TD COLSPAN='4' ALIGN='CENTER'>< I>No Results Available< /I>< /TD>< /TR>";
} else {
foreach($isbns as $isbn) {
$details = $client->getBookByISBN($isbn);
print "< TR>";
print "< TD>{$details['ISBN']}< /TD>< TD>{$details['AUTHOR']}< /TD>";
print "< TD>{$details['TITLE']}< /TD>< TD>{$details['PRICE']}< /TD>";
print "< /TR>";
}
}
print "< /TABLE>";
} catch(SoapFault $e) {
$msg = (!$e->getMessage()) ? $e->faultstring : $e->getMessage();
print "Sorry, an error was returned: $msg< HR>";
}
?>
< TABLE>
< FORM ACTION="< ?php print $_SERVER['PHP_SELF']; ?>" METHOD="GET">
< INPUT TYPE="hidden" NAME="mode" VALUE="title">
< TR>< TD>< B>Search By Title:< /B>< /TD>
< TD>
< INPUT TYPE="text" NAME="title" SIZE="50" MAXLENGTH="50">
< INPUT TYPE="submit" VALUE="Search">
< /TD>< /TR>
< /FORM>
< FORM ACTION="< ?php print $_SERVER['PHP_SELF']; ?>" METHOD="GET">
< INPUT TYPE="hidden" NAME="mode" VALUE="author">
< TR>< TD>< B>Search By Author:< /B>< /TD>
< TD>< INPUT TYPE="text" NAME="author" SIZE="50" MAXLENGTH="50">
< INPUT TYPE="submit" VALUE="Search">
< /TD>< /TR>
< /FORM>
< TR>
< TD COLSPAN='2' ALIGN='center'>
< A HREF="< ?php print $_SERVER['PHP_SELF']?>">Display All Books< /A>
< /TD>
< /TABLE>
< /BODY>
< /HTML>
在执行时,这将通过 PHP 驱动的 Web 服务为 Oracle 数据库提供一个难看但功能完善的界面。
结论
现在,您应该具备了所有必备知识,可以使用 Oracle 支持的数据库,并将它们与 PHP 中的 SOAP 功能相结合,以创建强大的 Web 服务。随着 Internet 的演化越来越接近神奇的 Web 2.0,这些服务构成了面向服务体系结构的重要部分,也成为了丰富的 Internet 客户端体验的一个特点。尽管我们没有涵盖 PHP 中的 SOAP 功能的每个细节,但我们只忽略了仅在很少情况下(例如,不使用 WSDL 文档连接到服务)可用的那些功能。