php构建soap_使用PHP构建Web服务

php构建soap

在你开始前

关于本教程

本教程适用于希望通过在PHP中创建Web服务来跳入Web服务潮流PHP程序员。 您将通过使用PHP构建SOAP服务器来构建Web服务。 您将创建的Web服务将是一种车辆查询服务,该服务将接受基于品牌,型号和年份的查询。 然后,Web服务将查询内部数据库并做出适当响应。 基于Web的客户端也将用PHP编码,以通信和查询SOAP服务器。 它在PHP中创建了由三个SOAP服务器组成的链。 实际上,这三台服务器中的每台服务器都将放置在三个不同的物理位置或城市中,在这三个城市中,汽车经销店将并存。 然后,将客户托管在汽车客户来访的一个位置,输入搜索查询以找到他们梦dream以求的车辆。 客户端将查询路由到三个SOAP服务器中的每一个,后者再将结果发送回客户端。 收到每个响应后,客户端将搜索结果显示给用户进行分析。

系统要求

需要使用以下工具:

网络服务器
可以使用任何操作系统和任何Web服务器。 随时使用Apache V2.X或IBM的HTTP Server; 从ApacheIBM下载。
PHP
由于使用了PHP数据对象,因此需要PHP V5.1或更高版本 。 确保使用以下选项进行配置,以包括对Derby和SOAP扩展的支持:-- --with-pdo-odbc=ibm-db2,/home/db2inst1/sqllib --enable-soap 。 请参阅相关主题有关使用PHP配置Apache或IBM的HTTP服务器的信息。
数据库
本教程使用Apache Derby ,它是开源且轻量级的。 还要下载IBMDB2®JDBC通用驱动程序DB2运行时客户端 。 请确保按照每个页面上的说明正确设置CLASSPATH 。 您可以遵循Linux®Windows®指示信息来安装和下载DB2 Run-Time Client。 请参阅相关主题以获取更多信息,以帮助您正确的配置。

IBM Cloudscape也可用于本教程。 它的内部与Derby相同。 但是,DB2 JDBC通用驱动程序和其他内容已打包到Cloudscape中,并且受IBM支持。 从IBM下载IBM Cloudscape V10.1DB2 Run-Time Client
Java技术
Derby需要Java™技术。 从Sun Microsystems或从IBM下载。

概述和设置

Web服务在很长一段时间以来一直很受欢迎,并且受欢迎程度还在不断增长。 但为什么? 这是因为它们是将多个实体集成到一个实体中的理想方法,从而可以更好地将信息传递给管理层和客户。

PHP在这方面绝对不落后。 作为增长最快的语言之一,PHP也吸引了许多需要此技术的开发人员。 看一下Web服务,SOAP背后的技术,以及像Derby这样的数据库如何帮助实现更强大的Web服务。

肥皂

SOAP是什么意思? 它代表“ 简单对象访问协议” ,它实际上是通过HTTP交换基于XML的数据的标准。 换句话说:如果您正在和朋友通电话,这是电话线上的信号,但不是您和您的朋友通电话,而是汽车客户在这里寻找梦想中的车辆一连串的汽车经销店。 清单1中显示了SOAP消息的示例。

清单1. SOAP消息
<SOAP-ENV:Envelope>
  <SOAP-ENV:Body>
    <SOAP-ENV:Fault>
      <faultcode>SOAP-ENV:Server</faultcode>
      <faultstring>Bad Request. Can't find
                   HTTP_RAW_POST_DATA</faultstring>
    </SOAP-ENV:Fault>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

虽然稍后会再次看到,但此处显示了它,因此您可以对该技术有所了解。 大多数SOAP消息的主体都有数据,类似于此处显示的错误。 有时,标头用于保存要发送的SOAP构造的加密和其他上下文相关数据。 同样,SOAP消息作为原始XML数据发送。

数据库如何适应

如果没有数据库,Web服务将几乎无用。 您可以使用数据库存储有关特定用户在访问期间查询或查看的内容的信息。 大型公司的大多数现有系统都有大量的数据库和信息,这使得数据库的使用对于成功的Web服务(甚至对于已建立的网站)至关重要。

站点信息几乎总是存储在数据库中,并且通过Web服务访问此类信息同样重要。 因此,学习如何将PHP Web服务与数据库集成至关重要,就像基本PHP设置一样。 如果没有数据库供您随时使用,PHP开发就不是PHP开发。

PHP中的示例经销商应用程序

在本教程中,您将为Web服务利用以上所有内容,从而使您能够快速入门自己PHP Web服务开发。 您将要构建的应用程序具有一个用户界面,用户可以在其中输入查询,如下所示。

图1.寻找梦想的载体
寻找梦想的载体

PHP中的简单SOAP服务器

您将创建一个简单的SOAP服务器,以学习使用基本PHP SOAP服务器功能。 本节将使您领会并为教程的其余部分做好准备。

创建服务器

一个简单的服务器接收一个SOAP请求并返回一个响应。 创建一个简单的echo应用程序,该应用程序接收一个字符串,并将其前面加上ECHO字样发送回去。 创建一个名为simple_server.php的文件,并如下所示对其进行定义。

清单2.一个简单的SOAP服务器
<?php

function echoo($echo){
    return "ECHO: ".$echo;
}

$server = new SoapServer(null,
                         array('uri' => "urn://tyler/res"));
$server->addFunction('echoo');
$server->handle();

?>

第一项是echoo功能。 它返回传递给它的字符串,并将ECHO:附加到它的前面。 另外,请参见如何在PHP中创建SoapServer对象。 然后将echoo函数添加到SOAP服务器支持的函数列表中。 您必须调用函数echoo因为echo是PHP中的保留字,类似于print命令。 最后一行调用SoapServer对象的SoapServer方法,允许服务器处理SOAP请求并返回响应,如echoo方法中所定义。

SOAP消息

由于发送请求的方式,将浏览器指向其当前状态的SOAP服务器会导致错误。 数据需要通过HTTP作为原始POST数据发送,如faultstring

清单3.将浏览器指向SOAP服务器
<SOAP-ENV:Envelope>
  <SOAP-ENV:Body>
    <SOAP-ENV:Fault>
      <faultcode>SOAP-ENV:Server</faultcode>
      <faultstring>Bad Request. Can't find
                   HTTP_RAW_POST_DATA</faultstring>
    </SOAP-ENV:Fault>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

服务器现在处于活动状态,但是您只能通过SOAP客户端访问它,否则将出现错误错误,如上所示。 现在您知道SOAP服务器正在运行,接下来可以创建一个简单的客户端了。

创建客户:回显表单

客户端允许您使用正确的预期协议将数据发送到SOAP服务器。 由于您只需要任何字符串即可发送到SOAP服务器以对其进行测试,因此您将创建一个带有一个文本框和一个按钮的简单表单。 创建一个名为simple_client.php的文件并对其进行定义,如下所示。

清单4.创建一个简单的表单
<?php

$echo = $_GET['input'];

print "<h2>Echo Web Service</h2>";
print "<form action='simple_client.php' method='GET'/>";
print "<input name='input' value='$echo'/><br/>";
print "<input type='Submit' name='submit' value='GO'/>";
print "</form>";
...

由于应用程序的功能,将请求发送到SOAP服务器的方法是通过GET 。 如果该函数具有副作用,例如数据库修改或登录,则需要使用POST

该代码首先从GET数组或URL中检索输入的值。 接下来,创建表单,操作字段是相同PHP脚本simple_client.php,因此来自此表单的GET请求将发送到相同PHP脚本。 请注意,这里有两个输入标签:一个文本框,您将在其中键入要从SOAP服务器返回的值,以及一个GO按钮。 表单预览如下所示。

图2.回声表单
回声形式

创建客户:发出请求

单击按钮后,上面显示的文本框中的文本将发送到URL中PHP脚本,您可以将其提取到GET数组中。 这使您可以验证是否已发送请求并进行处理。 继续定义simple_client.php文件,如下所示。

清单5.处理请求并将其发送到SOAP服务器
...
print "</form>";

if($echo != ''){
    $client = new SoapClient(null, array(
      'location' => "http://localhost/soap/simple_server.php",
      'uri'      => "urn://tyler/req"));

    $result = $client->
        __soapCall("echoo",array($echo));

    print $result;
}
?>

现在,如果$echo包含数据,则在文本框中输入内容,然后发出请求。 这使您可以通过创建SoapClient对象来发起对SOAP服务器的请求。 客户端通过参数数组中的位置知道将请求发送到哪里。 uri为SOAP数据包提供一个名称空间,该名称空间本质上是一个上下文。 SoapClient初始化后,通过使用两个参数调用客户端的__soapCall方法来向SOAP服务器发出请求:您要调用的SOAP服务器中的方法和一个参数数组。 然后,在GO按钮下方显示从SOAP服务器发送的响应,您可以在下面预览。

图3.显示来自SOAP服务器的响应
显示来自SOAP服务器的响应

你有它。 您甚至可以在URL中看到输入文本框的值。 现在,您已经创建了一个简单的SOAP服务器,您将创建一个使用Apache Derby和多个SOAP服务器的更复杂的服务器。

Derby:设置

对于这种应用程序而言,Derby是一个很好的数据库,因为它轻巧且易于使用。 本教程中的应用程序使用它来搜索符合搜索条件的车辆,本节将对所有内容进行设置,因此您一切顺利。

创建数据库

由于PHP使用网络服务器和ODBC连接到Derby,因此请键入以下命令来启动服务器:

java org.apache.derby.drda.NetworkServerControl start

当应用程序启动时,就可以接受连接了。 使用Derby ij工具连接并创建新数据库:

java org.apache.derby.tools.ij

现在,您应该在ij提示符下,可以在其中输入数据库命令。 ij工具允许您创建并连接到数据库,以及像在PHP中一样查询它们。 这有助于您在PHP应用程序中实现搜索查询之前对其进行微调和完善。 现在,您将创建并连接到数据库:

connect
 'jdbc:derby:net://localhost:1527/DEALER;create=true:
user=dealer;password=dealer;';

在这里,您已经创建了DEALER数据库,其用户名和密码均为dealer 。 接下来,您将在DB2中对数据库进行分类,以便PHP ODBC驱动程序将看到我们的新数据库并能够连接到该数据库。

在DB2中编目数据库

启动DB2客户机:在Linux中,在命令行中输入db2 ;在Linux中,输入db2 。 在Windows中,单击安装在程序> IBM DB2>命令行工具下的命令行处理器应用程序 。 提示DB2时,键入以下内容:

catalog tcpip node cns remote localhost server 1527

这将创建一个节点,您可以将数据库分类为:

catalog db DEALER at node cns authentication server

现在,我们的DEALER数据库已与cns节点关联。 接下来,将DEALER数据库分类为系统ODBC数据源,以便PHP ODBC驱动程序将找到并识别DEALER数据库:

catalog system odbc data source DEALER

经销商数据库已准备就绪! 您可以使用PHP连接到它,但是在执行此操作之前,请详细了解其用途并使用表对其进行初始化。

经销商数据库

该数据库包含三个表-每个物理经销商位置一个。 每个位置在数据库中都有自己的表格,其中包含车辆数据。 并且,当来自SOAP客户端的查询到达SOAP服务器时,每个SOAP服务器都会查询自己的数据库表并为其返回结果。 三个表:

  • vehicles_steinbach
  • vehicles_pinefalls
  • vehicles_selkirk

每个表都包含三个城市中每个城市的车辆,接下来将创建它们。

为每个位置创建车辆表

使用ij工具为经销商应用程序创建三个表中的每个表。 使用ij提示符下SQL命令创建它们,如下所示。

清单6.创建三个表
drop table vehicles_steinbach;
create table vehicles_steinbach (make varchar(50),
                                 model varchar(50),
                                 yyear varchar(4),
                                 price integer,
                                 feature_desc varchar(512));

drop table vehicles_pinefalls;
create table vehicles_pinefalls (make varchar(50),
                                 model varchar(50),
                                 yyear varchar(4),
                                 price integer,
                                 feature_desc varchar(512));

drop table vehicles_selkirk;
create table vehicles_selkirk   (make varchar(50),
                                 model varchar(50),
                                 yyear varchar(4),
                                 price integer,
                                 feature_desc varchar(512));

每个表都有一个makemodelyyearpricefeature_desc描述车辆的功能。

这些表的创建完成了数据库框架。 现在,通过向数据库添加一些内容来填充内胆。

用车辆信息初始化每个表

大多数经销店(甚至是连锁店)都会根据特定的品牌来定制每个经销店,等等。您会在每个表内容的选择中看到这一点。 使用下面显示的以下SQL,或创建您自己的内容作为数据库的内容。

清单7.用内容填充三个表
insert into vehicles_steinbach values
('Chrysler', 'Crossfire', '2005', 19999,
                          'Air conditioning, power windows'),
('Chrysler', 'Sebring',   '2003', 14999, 'Convertible'),
('Dodge',    'Viper',     '2006', 89999, 'loaded'),
('Chrysler', '300',       '2003', 18999, 'Leather seats'),
('Dodge',    'Durango',   '2004', 23999, 'Supercharged engine');

insert into vehicles_pinefalls values
('Toyota', 'Camry',  '2001', 13999, 'Power steering'),
('Toyota', 'Tacoma', '2002', 16999, 'Power seats'),
('Lexus',  'LS',     '2003', 26999, 'Built in GPS'),
('Toyota', 'Prius',  '2004', 29999, 'Built in TV and DVD player'),
('Lexus',  'GS',     '2005', 34999, '10 CD changer');

insert into vehicles_selkirk   values
('Saturn', 'Vue',   '2004', 15999, 'Power locks'),
('Saturn', 'Ion',   '2005', 12499, 'Reliable'),
('Saturn', 'Sky',   '2006', 19999, 'Convertible, must see!'),
('Saturn', 'Relay', '2004', 14999, 'Very roomy'),
('Saturn', 'L300',  '2001',  9999, 'Chrome wheels');

您的数据库已完成,可以由PHP应用程序查询,接下来将开始进行架构设计。

架构用户界面

数据库准备就绪后,就可以开始使用PHP应用程序了。 在本节的最后,您的应用程序将具有一个完整的用户界面,该表格包含要搜索的车辆的品牌,型号和年份。

标头

当请求页面时,标头显示在页面顶部,并将这些内容放在单独PHP脚本中使您的代码模块化且易于阅读,因为您可以简单地将标头文件包含在新脚本的顶部,而无需使文件混乱。 创建一个header.php文件并对其进行定义,如下所示。

清单8.创建头文件
<?php

define(COMPANY_NAME, 'SOAP Serverz R Us');

print('
<html>
<title>'.COMPANY_NAME.'</title>
<body>
<table width="650px" align="center" valign="top">
<tr><td colspan="2">
');

print('
</td></tr>
<tr><td colspan="2">
<center><h1>Welcome to '.COMPANY_NAME.'</h1></center></td></tr>');

print('<tr><td height="100%">
');
?>

这将设置页面HTML以及<table ...>标记定义的结构,并向访问用户显示问候语。 它以打开<td ...>标记结束。

页脚

页脚文件的概念类似于标头文件的概念。 将页眉和页脚文件放在一起,您基本上不再需要再次编写基本HTML标签(如<html><body> )。 这使您可以专注于自己的长处:PHP开发。 创建一个名为footer.php的文件并对其进行定义,如下所示。

清单9.创建页脚文件
</td></tr>
<tr><td align="center" colspan="2">
<font size="2px"><br>
<center>Copyright 2006, <?php print(COMPANY_NAME) ?></center>
</font>
</td></tr></table>
</body></html>

此文件从标题中关闭<td ...><table ...>标记,并显示一点版权,表明您不希望复制信息。 如浏览器所示,当前应用程序的预览可以在图4中进行预览。

图4.具有页眉和页脚的应用程序
具有页眉和页脚的应用程序

用表格查找车辆

创建页眉和页脚后,您可以专注于应用程序用户界面的主要内容。 创建一个名为index.php的文件并对其进行定义,如下所示。

清单10.创建用于搜索车辆的表单
<?php
require('header.php');

$make = $_GET['make'];
$model = $_GET['model'];
$year = $_GET['year'];
print "<h3>Search for vehicles based on year, make or model:</h3>";
print "<table>";
print "<form action='index.php' method='GET'>;";
print "<tr><td>Make:</td><td>";
print "<input name='make' value='$make'/>;</td></tr>";
print "<tr><td>Model:</td><td>";
print "<input name='model' value='$model'/>;</td></tr>";
print "<tr><td>Year:</td>";
print "<td><input name='year' value='$year'/>;</td></tr>";
print "<tr><td><input type='submit' name='submit' value='GO'/>;";
print "</td></tr>";
print "</form>;";
print "</table>";
...
require('footer.php');
?>

看看文件的美观和紧凑程度如何,而不会使页眉和页脚文件中的内容混乱? 然后,将页面内容以一致的布局放在中间。

该表单包含三个文本输入框:每个分别代表制造,型号和年份。 表单的代码以粗体显示,以使您更容易隔离,因为您可以随意设置其余的格式。 与Echo表单一样,此表单的HTTP传输方法也是通过GET因为执行此查询不会导致数据库或其他副作用。 执行查询后,操作字段将指定表单应将数据发送到相同的index.php脚本。 脚本的前三行从URL或GET数组中检索数据,接下来将对其进行处理。 但是,在您去那里之前,您可以预览表格。

图5.搜索车辆
搜索车辆

处理表格并致电客户

汽车客户提出请求后,您的代码需要处理该请求,并调用客户端代码以请求来自三个SOAP服务器中每个服务器的响应。 通过完成index.php文件来完成此操作,如下所示。

清单11.处理来自用户界面的请求
print "</form>";
print "</table>";

if($_GET['submit'] === 'GO' &&
   ($make != '' || $model != '' || $year != '')){
    print "<h3>Search Results:</h3>";
    require('client.php');
}

require('footer.php');
?>

您将知道,如果GET数组的submit值等于GO ,那么该请求是由汽车客户submit 。 现在,如果单击了按钮并且填写了一个或多个文本框,则通过客户端代码初始化对SOAP服务器的请求,您将在下一部分中对其进行定义。

现在,您将为三个位置中的每个位置创建一个简单的Web服务器,以准备测试将在下一节中开发的客户端代码。

每个位置的简单Web服务

首先从Web服务的简化版本开始,然后在其上进行构建。 创建三个文件:server_steinbach.php,server_pinefalls.php和server_selkirk.php,并定义每个文件,如下所示。

清单12.创建三个SOAP服务器
<?php

function vehicleLookup($make, $model, $year){
    return '<tr><td>'.$make.' '.$model.' '.$year.'</td></tr>';
}

$server = new SoapServer(null,
                         array('uri' => "urn://tyler/res"));
$server->addFunction('vehicleLookup');
$server->handle();

?>

请注意,在将车辆搜索查询传递给SOAP服务器时,客户端代码将调用vehicleLookup方法。

大! 您的应用程序框架已准备好用于客户端代码。

客户端

客户端代码通常称为创建能够与服务器通信,发送请求并接收响应的客户端的代码。 这就是您在本节中要开发的内容:创建客户以与三个经销店位置进行通信的代码。

为每个位置初始化一个客户端

向SOAP服务器发送请求的第一步是创建三个客户端,将其位置设置为指向三个SOAP服务器的三个URL中的每个URL。 创建一个名为client.php的文件并对其进行定义,如下所示。

清单13.创建三个SOAP客户端
<?php

$client_steinbach = new SoapClient(null, array(
      'location' => "http://localhost/soap/server_steinbach.php",
      'uri'      => "urn://tyler/req"));

$client_pinefalls = new SoapClient(null, array(
      'location' => "http://localhost/soap/server_pinefalls.php",
      'uri'      => "urn://tyler/req"));

$client_selkirk = new SoapClient(null, array(
      'location' => "http://localhost/soap/server_selkirk.php",
      'uri'      => "urn://tyler/req));
...

在这里,将创建三个SOAP客户端中的每个客户端,每个客户端都指向三个经销店城市中的每个城市的三个位置之一。

从每个SOAP服务器中查找车辆

创建了三个客户端后,您现在可以调用SOAP服务器的vehicleLookup方法并开始返回结果! 继续定义client.php文件,如下所示。

清单14.从每个SOAP服务器检索响应
...
      'uri'      => "urn://tyler/req"));

$result_steinbach = $client_steinbach->
    __soapCall("vehicleLookup",array($make,$model,$year));

$result_pinefalls = $client_pinefalls->
    __soapCall("vehicleLookup",array($make,$model,$year));

$result_selkirk = $client_selkirk->
    __soapCall("vehicleLookup",array($make,$model,$year));
...

注意如何存储对每个客户端的__soapCall每次调用的每个响应。 __soapCall方法接受您感兴趣的两个参数。第一个是您正在调用的SOAP服务器中方法的名称,另一个是您要传递的参数数组。

显示结果

现在您有了结果,可以显示它们。 完成定义client.php文件,如下所示。

清单15.向汽车客户显示搜索结果
...
$result_selkirk = $client_selkirk->
    __soapCall("vehicleLookup",array($make,$model,$year));

if($result_steinbach != '' ||
   $result_pinefalls != '' || 
   $result_selkirk != ''){
    print "<table>";
    print
 "<tr><td><b>Make</b></td>
<td><b>Model</b></td>";
    print "<td><b>Year</b></td>";
    print
 "<td><b>Price</b></td><td>
<b>Description</b></td></tr>";
    print $result_steinbach;
    print $result_pinefalls;
    print $result_selkirk;
    print "</table>";
}
?>

如果三个经销店(SOAP服务器)之一返回结果,则显示表格,并将来自三个经销店每个的结果作为行。 在下面预览当前结果。

图6.搜索结果
搜索结果

在下一节中完成服务器的定义后,输出将显示结果,而不仅仅是回显。

服务器

现在,您将开发SOAP服务器。 这三个SOAP服务器由客户端代码调用,它们各自返回结果,如在其自己的本地数据库中找到的那样。 在本部分中,您将通过连接并查询Derby数据库并返回格式化的结果来开发服务器。

连接到德比

在查询数据库之前,您需要使用PHP连接到它。 在所有三个服务器文件中定义一个方便的db_connect函数,如下所示。

清单16.连接到DEALER数据库
<?php

function db_connect($dbname='DEALER',
                    $username='dealer',
                    $password='dealer'){
    $pdo = new PDO("odbc:$dbname", $username, $password);
    return $pdo;
}

function vehicleLookup($make, $model, $year){
...

现在,无论何时调用此方法,PHP都将连接到数据库并返回一个PHP数据对象。 要了解有关PHP数据对象及其功能的更多信息,请参阅参考资料

创建数据库查询

在这里,您将要修改vehicleLookup方法,以便您可以在数据库中查询结果,而不仅仅是将返回的内容发送回客户端。请在三个服务器文件的每一个中修改vehicleLookup方法,如下所示。

清单17.为数据库查询创建SQL
function vehicleLookup($make, $model, $year){
    $pdo = db_connect();
    $queryMake = '';
    $queryModel = '';
    $queryYear = '';
    $query = '';

    if($make != '')
        $queryMake = "make='$make'";
    $query = $queryMake;

    if($model != '')
        $queryModel = "model = '$model'";
    if($query != '' && $queryModel != '')
        $query .= " and $queryModel";
    else if($queryModel != '')
        $query = $queryModel;

    if($year != '')
        $queryYear = " yyear = '$year' ";
    if($query != '' && $queryYear != '')
        $query .= " and $queryYear";
    else if($queryYear != '')
        $query = $queryYear;

    $sql = "select * from ".TABLE." where $query";
...

首先,您通过连接数据库检索PHP数据对象。 然后,您检查三个参数中的每个参数以查看它们是否具有内容(意味着它们不等于空字符串)。 如果是这样,请将它们附加到$query字符串中,该字符串将在SQL语句的where子句中使用。 $make所需的代码很容易,并且通过$model$year变得稍微复杂一些。 对于后两种情况,如果$query和参数不为空,则使用and作为后缀将它们附加到where子句。 否则,如果参数不为空,则将其设置为$query ,如果$query和参数均为空,则不执行任何操作。 最后,通过从表中进行选择来创建SQL语句,并插入$query作为where子句的值。

查询数据库并格式化结果

现在已经准备好SQL语句并准备好用于查询数据库,接下来将查询数据库,如下所示。

清单18.查询数据库并格式化结果
...
    $sql = "select * from ".TABLE." where $query";

    $ret = '';
    foreach($pdo->query($sql) as $row){
        $make = $row['MAKE'];
        $model = $row['MODEL'];
        $year = $row['YYEAR'];
        $price = $row['PRICE'];
        $desc = $row['FEATURE_DESC'];
        $ret .= "<tr><td>$make</td>";
        $ret .= "<td>$model</td>";
        $ret .= "<td>$year</td>";
        $ret .= "<td>$price</td>";
        $ret .= "<td>$desc</td></tr>";
    }
    return $ret;
}

通过将返回参数$ret设置为空字符串或''来设置它。 然后在foreach语句中查询数据库并遍历每个结果,这些结果在每次循环时都存储在$row 。 接下来的五个语句从数据库检索makemodelyyearpricedescription信息。 接下来的五个语句使用HTML将这些结果格式化为一行。 最后一条语句将结果返回给客户端,客户端将显示结果。

针对每个位置进行定制

您是否注意到清单17中定义的TABLE的使用? 这就是使每台服务器彼此不同的原因,因为每台服务器查询数据库中的不同表。 通过添加代码来完成每个服务器文件,如下所示。

清单19.定义表
<?php
define('TABLE', 'vehicles_selkirk');
function db_connect($dbname='DEALER',
...

做好了以上的server_selkirk.php文件,定义TABLE变量作为vehicles_pinefallsvehicles_selkirk分别为vehicles_pinefalls.php和vehicles_selkirk.php文件。

查看搜索所有2005年车辆的结果,如下所示。

图7.搜索所有2005年的车辆
搜索所有2005年的车辆

优秀的! 该应用程序已完成,您现在已经是一个PHP SOAP服务器专家。

摘要

您已经用PHP开发了SOAP服务器。 现在,您可以通过以臭名昭著PHP编程语言构建带有Web服务的集成Web应用程序,从而实现Amazon和Google对Web服务的功能。 最重要的是,您已经将Web服务与Derby数据库的轻量级功能集成在一起,用于数据查询和存储。


翻译自: https://www.ibm.com/developerworks/opensource/tutorials/os-php-webservice/index.html

php构建soap

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值