Oracle 是一个用于构建基于 Web 的应用程序的强大数据库。PHP 以快速和高效著称;它能够帮助您构建不会加重您的数据库负担的快速应用程序。将 Oracle 与 PHP 结合,您就获得了一个强大的动力组合。
PHP(超文本预处理器的缩写)已飞速发展成最流行的 Web 编程语言之一。 (据 netcraft.com 称,Apache 占据了整个 Web 服务器市场的 55%,而 PHP 声称占所有 Apache 服务器的 38%。) 它答应您快速有效地完成任务,同时为更复杂的应用提供改进的特性,从而能够成为最流行的编程语言。 由于将效率和低开销作为它主要的导向,因此它有助于构建一些加速的基于 Web 的应用程序。 PHP 也是开放源代码 — 您不需要等供给商来修复错误,大量的同行审查将揭露并排除其中的错误。
PHP 本质上是一个脚本集合 — 很类似于您可能用 Perl 或 Python 编写的脚本,您可以将它直接嵌入到 Html 页面中。在这种方式下,HTML 作为页面的基本框架,而动态 PHP 代码从您的 Oracle 数据库中取出内容和信息。
PHP 与 Oracle 兼容并不是新鲜事;实际上,Oracle 是除 mysql 之外可以与 PHP 连接的最早的数据库之一。程序员多年来一直在为 Oracle 构建 PHP 应用程序,通常的方式是利用 PHP + Oracle 支持来构建 Apache。然而,Oracle 为这种组合和为构建基于 PHP 的应用程序的用户提供的支持 — 包括 OTN 上的文档编制,以及为利用 Oracle Application Server 安装 mod_php 而提供的 Metalink 支持,这一切的确是前所未有的。
在即将发布的 Oracle Application Server 10g 版本中,Oracle 计划进一步提升这种支持,包括在版本 CD 上提供 PHP,以及将它进一步与其它的 Oracle 产品集成在一起。
入门
在可以使用 PHP 来做任何事情之前,当然必须确保已在系统上安装和运行了 PHP。一种快速轻松的方法是编辑文件 test.php,在其中插入这一行:
<?php phpinfo()?
……然后将您的浏览器指向那个页面。例如,假如您的服务器名为 learningphp.com,您的 URL 可能是 http://learningphp.com/test.php。假如您得到一个 "Not Found" 错误,则您可能未正确指定文件名、它的路径或 URL 中的其它内容。假如您得到一个 "Forbidden" 错误,则 web 服务器在该文件上的权限可能是不可读。(这些是基本的 Apache 配置问题;关于 Apache 配置的更多信息,请参见“接下来的步骤”框。)
您可能碰到的另一个严重问题是在您的浏览器中只看到显示了以上三行代码。假如发生这种情况,则可能 Apache 没有加载 PHP,或您的 Apache 配置没有指定加载它。在那种情况下,请查看您的 httpd.conf 文件,并确认存在这些行:
AddModule mod_php4.c
<IfModule mod_php4.c
AddType application/x-httpd-php4 .php4
AddType application/x-httpd-php4-source .phps
</IfModule
假如在作了这些修改并重启 Apache 之后,您仍不能加载 test.php 文件,则可能需要考虑编译 Apache 和 PHP — 这个工作超出了本文的范围。
当您正确地加载了这个文件时,浏览器将显示各种各样有用的 PHP + Apache 配置信息。关于进一步微调 PHP 配置的信息,请参考 php3.ini 文件。
一个简单的示例
在我们的第一个示例中,我将按惯例向您显示 hello world 程序,并请求服务器显示出当前的时间。您将很快了解一段 PHP 代码如何看起来像是嵌在一个 HTML 页面内的。您还将了解一些简单的 PHP 函数的工作方式。
首先,编辑您的文档根目录中的名为 hello_world.php3 的文件,并将以下几行插入到该文件中:
<HTML
<TITLEhello world</TITLE
<BODY
<!—Add comments here —
<H1Hello World</H1<p
<H2
<?php
$currtime = time ();
$currtimestr = strftime ("%H:%M:%S", $currtime);
echo "The current time is:$currtimestr";
?
</H2
</BODY
</HTML
当您完成这一步时,保存该文件并在您的浏览器中加载它。
单击 Reload 几次,直到您确信时间被动态地确定了。
这个小示例还说明了如何在 PHP 中使用变量:在计算期间它们可以在内部保存值,或者当您要把一系列信息集中起来时可以保存字符串。变量还可以通过 URL 将数值引入到您的脚本中。
这里是另外一个例子;保存该代码示例到 variables.php3:
<HTML
<TITLEFirst Variables Example</TITLE
<BODY
<?php echo "VALUE IS:$zipcode";?
</BODY
</HTML
现在通过 URL (如 http://myserver.com/variables.php3?zipcode=10003)来调用页面。
一个非常简单的示例,但您可以看到,在 URL 中使用的变量自动成为您的 PHP 脚本中的变量。稍后我们将看到如何使用 PHP 中的这一特性来为我们带来好处。
如何使用数据库
任何快速开发中等复杂度的 Web 应用程序的人都发现,页面之间的持续变量只能短暂地保存信息。这就是要引入数据库的原因;Oracle 已做好了充分的预备来满足这种需求。
那么我们如何把 PHP 与 Oracle 结合在一起?与 PHP 的传统保持一致,这个过程非常简单:提供用户名和口令以及数据库连接具体资料,您就可以快速地与 Oracle 连接来存储和检索数据。
例如,假定我们创建了一个名为 "example" 的表,它有两列,分别是名和姓。(确保为 Apache user 设置了 ORACLE_HOME 和 ORACLE_SID。)与 Oracle 数据库连接是一件简单的事情:
<HTML
<TITLEFirst Variables Example</TITLE
<BODY
<?php
$tns = 'sean';
$user = "scott@$tns";
$pass = 'tiger';
$q1 = 'SELECT * FROM example';
$conn = ora_logon($user, $pass);
$mycursor ora_open ($conn);
ora_parse ($mycursor, $q1, 0);
ora_exec ($mycursor);
while (ora_fetch($mycursor)) {
echo "RESULT:ora_getcolumn ($mycursor, 0), ora_getcolumn ($mycursor, 1) <br";
}
ora_close($mycursor);
?
</BODY
</HTML
假如您计划使用 PHP 扩展的 PEAR 库(稍后再详述),那么您应该了解一下 PEAR DB。PEAR DB 提供了一个数据库抽象层,这个抽象层答应您编写应用程序,并且只修改 conntion 描述符来与一个不同类型的数据库连接(比如说,与 MySQL 上的原型连接并使用 Oracle 进行生产)。数据库抽象意味着您的应用程序不是被束缚在一个数据库上,而是可以在无数的数据库上工作。然而,它也意味着您不得不接受特性的最小公分母。因此您的体验可能会有所不同。
特性概述
条件、循环和运算符
像所有的迭代编程语言一样,PHP 通过 if/then 语句支持条件。这是一个语法示例:
if ($a 100) {
do this...
} elseif ($a 50) {
do that...
} else {
do some other thing...
}
它还通过 switch 或称为 case 语句来支持类似功能。然后,当然有循环,这由条件在最初指定的 WHILE 和在最后指定的 DO...WHILE,以及在一开始指定迭代次数的 FOR 来支持。例如:
while ($notdone == 0) {
some code here...
if (some condition) {
$notdone = 1;
}
}
至于运算符,您将发现您所期望的全部,包括用于基本数学运算的 +、-、*、/,用于求模的 %,和用于比较运算的 、=、<=、!= 和 <。 此外还包括了由要害字 AND (&&)、OR () 、XOR、和用于求非的 ! 提供的逻辑运算符。 注重 = 是赋值,而 == 是相等比较。 您还可以使用 '.' 运算符来连接字符串。 (这些功能大部分和 Perl 和其它脚本语言的功能类似。关于具体情况,请参见您的 PHP 手册。)
支持的数据类型
PHP 通过 DEFINE 语句、整数、浮点值、字符串、不同类型的数组和面向对象编程中使用的抽象对象类型来支持常量。当您创建了一个变量时,PHP 根据它的初始值来设定类型。例如,假如您给定了一个值 2,PHP 将创建一个整数 (2.0)、一个浮点数 ("2.0") 和一个字符串。
正则表达式
PHP 的最出色的特性之一是它为正则表达式提供的支持。正则表达式通过 grep、egrep、awk 和使用诸如 sh、csh 和 Perl 之类的语言编写的脚本在 Unix 中使用。从根本上说,正则表达式指定一种模式,引擎将对照该模式进行比较,以找到字符串内容或替换它们(或二者都进行)。
例如,假定您有一个 web 表单,其中用户指定了一个电子邮件地址,而您想要确认它有效。(参见安全性部分来了解为什么检验表单中的输入值是如此重要。)这一小段代码将为您实现这个目的:
if (ereg ("^.+@.+\\..+$", $inEmail)) {
do something with your email address...
?} else {
address is invalid, discard and/or return error
}
Oracle API
因为如此多的基于 Web 的应用程