利用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 文档连接到服务)可用的那些功能。
更多精彩
赞助商链接