文章
| Oracle + PHP
部署 PHP 系列,第 5 部分:Zend Core for Oracle 快速入门指南 使用最简单的方法 Zend Core for Oracle 安装、部署以及配置 PHP 和 Oracle。
PHP 从早期开始便能够与 Oracle 进行通信,但过程并不简单。即使在最佳情况下将 PHP 与 Oracle 结合部署也很复杂,需要开发人员和管理员查找、下载、编译、链接以及配置多个应用程序和程序包。这与 PHP 用户的期望相违,因为 PHP 是以快速部署和快速投放市场而著称,而不像 C 语言那样需要烦琐的过程。 值得庆幸的是,在 Oracle 与 Zend 的共同努力下,这个时代将成为历史。利用 Zend Core for Oracle 开发人员能够快速、轻松地安装、部署和配置 PHP 与 Oracle。本文为 DeployPHP 系列的终结篇,您将从中详细了解该过程。 为什么需要 Zend Core for Oracle? 如果它足够简单的话...(为您带来的好处)。您恐怕就要失业了。但事实并非如此;它并没有那么简单。当然,一旦您拥有了 Oracle 和 PHP 的强大功能,那么相关人员就需要编写代码。 言归正传,使用 Zend Core for Oracle 的最大好处就是部署简单。您将有更多的时间来编写实际代码,而不是被迫处理环境变量和链接问题。 第二大好处是,它是第一个面向 Oracle 的紧密集成、经过全面测试并受全面支持的 PHP 平台。没错,一个经全面测试并全面支持的平台。 使用 Zend Core for Oracle,您还可以随时了解 Oracle/PHP 平台的当前状态和配置。您可以了解正在运行的每个扩展的版本和系统的运行状况。此外,平台更新也变得轻而易举。Zend Core for Oracle 提供了一些工具,用于通知您需要更新的程序包和扩展。Zend Core for Oracle 甚至还可以根据预定的计划自动更新平台。如果出现问题,Zend Core for Oracle 可以回滚更改,从而恢复到一个可正常工作的已知状态。 您最终获得的 PHP 和 Oracle 平台与基于应用服务器的解决方案非常类似,但它没有任何繁重(并且通常是不必要)的负载。 且慢,还有更多...(为老板带来的好处)。当然,即便您已经相信了 Zend Core for Oracle (甚至尚未安装它!)的价值所在,但还有最后一道坎需要跨越:您必须说服您的老板。以下是老板们需要知道的几个好处:
在开始介绍安装过程之前,应简单了解一下当前支持的平台。在撰写本文时(2005 年 11 月),Zend Core for Oracle 提供的平台支持非常有限:Red Hat Enterprise Linux 3(而非 4)、SUSE Enterprise Linux 9、AIX 5.2 和 5.3 以及 Solaris 10。在撰写本文时,针对 Windows 的版本(Windows XP Professional/2000 Server 系列/2003 Server 系列)处于测试阶段并计划于 2005 年年底全面投放市场。现在,可以在其他一些操作系统上运行 Zend Core for Oracle(许多 PHP 开发人员没有运行支持的操作系统的大型服务器),但这样做将丧失运行 Zend Core for Oracle 的最大好处之一:支持。但请注意,对于不支持的平台不提供任何保证,您可能需要花费大量时间自行解决问题。 在编写本文时,我可以比较轻松地使 CentOS 4 上运行的 Zend Core for Oracle 与 Ubuntu Linux 上运行的 Oracle 10g 数据库进行通信。如果您想运行 RHEL4 或 CentOS4,请确保在 /etc/sysconfig/selinux 文件中使用以下行禁用 selinux: SELINUX=disabled您完全可以尝试运行 selinux,但这需要相当长的时间来手动配置 selinux。 安装 Apache 如果单纯从速度角度出发进行该部署(很可能是预期的结果),那么获得 Web 服务器最简单、最快速的方法就是使用与平台相对应的程序包管理应用程序。例如,对于 RHEL 而言,可以选择使用图形程序包管理应用程序或在命令行中执行 rpm 命令。要使用 Red Hat 的 GUI 工具安装 Apache,只需在程序包管理应用程序中向下滚动到 Servers>Web Server,然后选择 Apache。然后,选择右侧的 Details 以选择/取消选择所需的额外程序包。请确保取消选择 php 以及任何其他依赖于 php 的程序包,这可以避免 Zend Core for Oracle 以及 Red Hat 安装的 PHP 程序包中出现任何潜在的冲突。(以上操作表明,最终您所需要的就是通过 Web 服务器来安装 Zend Core for Oracle!) 如果您倾向于在命令行中执行 rpm 命令,则只需从你最常用的站点中下载 Apache 1.3.x 或 2.0.x rpms,然后运行: rpm -ivh httpd.2.0.46.rpm如果您艺高人胆大(在没有支持的情况下独自操作,想在基于 RHEL4 的操作系统上进行安装,那么由于相关性方面的原因,您将很可能还需要下载并安装 httpd-suexec rpm。 注意,Zend Core for Oracle 支持仅在预先分支模式下编译的 Apache。这对以前曾使用过 PHP 的用户并不奇怪;对于未曾使用过 PHP 的用户而言,本常见问题解答对相关问题进行了详细介绍。但这里你只要知道由 PHP 式 MPM 和 Apache 2 式 MPM 从未“可靠地协同工作过”。 最后,如果要优化 Web 服务器,或您不信任预编译的二进制文件而坚持对所有内容进行编译,此时您可能已经知道所要执行的操作。否则,请参考下面用于编译 Apache Web 服务器的简单运行代码: # tar xvzf apache_2.0.46.tar.gz # cd apache_2.0.46 # ./configure -prefix=/usr/local/apache/htdocs \ --enable-module=so # make # make install如果您很想知道为什么未定义 MPM 模块来编译以上代码,原因就是我们不必这样做。Apache 在基于 *nix 的系统上默认为以预先分支的形式进行编译。 安装 Apache 后,请使用以下命令启动 Web 服务器: # apachectl start将浏览器指向 http://localhost 并验证是否显示 Apache 默认测试页面。如果显示该页面,您可以继续安装 Zend Core for Oracle。 安装 Zend Core for Oracle 您需要执行的第一个操作是下载 Zend Core for Oracle 程序包(需要在 Zend Network 中进行注册)。解压缩该程序包后,您将在生成的目录中发现两个安装脚本。大多数 Linux 系统都可以正常运行 Text UI(基于 curse)版本的安装程序,名称为 install。您也可以运行 install-tty,使用纯文本安装程序。 # tar xvzf ZendCoreForOracle-v1.2.2-Linux-x86.tar.gz # cd ZendCoreForOracle-v.1.2.2-Linux-x86 # ./install阅读许可协议并选择接受。然后,您将作出安装过程中将必须作出的一个最重要的决策:将 Zend Core for Oracle 安装在什么位置?大多数用户都应接受默认位置 /usr/local/Zend/Core 并在安装 Zend Core for Oracle 后看到文件名 whiz by。 此外,还有几个简单的步骤:首先,将提示您输入口令以访问 Zend Core for Oracle 的 Web UI。然后,将提示您输入当前 Zend Network 帐户的用户名和口令。Zend Core for Oracle 的最佳特性之一是可以看到平台的状态。Zend Network 帐户用于跟踪更新程序信息,不仅是 Zend Core for Oracle 的更新程序信息,还有已安装的 PHP 组件的更新程序信息。如果您当前没有 Zend Network 的用户名和口令,可以在该对话框中始终输入“no”,以后再运行安装工具添加帐号。 但请注意,如果不输入 Zend Network 帐户信息,您将无法通过 Web 界面检查更新,从而丧失 Zend Core for Oracle 的一个主要优点。(注意:您仍然可以看到已安装的每个组件的版本,但您不知道何时推出更新程序。) 接下来,将询问您要将 Zend Core for Oracle 安装到哪个 Web 服务器。此时,您最好选择以前安装的 Apache Web 服务器。Zend Core for Oracle 最终将支持 Oracle HTTP Server(基于 Apache),但当前的支持存在很多问题。完成以下屏幕中的选择;它们要比其他选项需要更多的确认。
下一个决策将是如何将 Zend Core for Oracle 安装到 Apache。此处的标准建议是安装为 Apache 模块。尽管存在用于 FastCGI 和 CGI 的选项,但对于大多数要求将 Oracle 用作后端的应用程序而言,没有理由不选择 SAPI 模块。 您的最后一个重要决策是:如果您已经将 Web 服务器设置为使用虚拟主机,则可以选择要将 Zend Core for Oracle 部署到的虚拟主机。注意,您实际上将 Zend Core for Oracle Web UI 安装到所选的虚拟主机, PHP 将仍可用于该计算机上的其他虚拟主机。例如,假设您获得了两个虚拟主机:zco.acme.com 和 juniper.acme.com。您选择将 Zend Core for Oracle 安装到 zco.acme.com。然后,您将在 http://zco.acme.com/ZendCore 处访问 Zend Core for Oracle 的 Web UI。但 juniper.acme.com 将仍使用 Zend Core for Oracle 的绑定 PHP 引擎提供 PHP 页面。您在 zco.acme.com 处设置的配置将有效地应用于该计算机上的所有虚拟主机,除非您在 Zend Core for Oracle 的外部进行了更改(例如,将 php_flag 指令添加到 Apache 中的虚拟主机。) 到这一步,您可能会感觉到一定有什么东西丢失了。一定有什么地方出错了,它不可能这样简单。但它确实就是这么简单!无需单独下载并安装 Oracle 客户端库,或设置环境变量、编译、链接以及重新编译。Zend Core for Oracle 提供了安装所需的所有内容(除了 Web 服务器和数据库以外)。 如果您一定要知道该技巧的秘密,那么答案其实很简单:Zend Core for Oracle 包含预配置的 Oracle Instant Client Binaries。 下面我们将试用该软件! 做好准备...(即,配置新平台) 首先,确保您可以访问 Zend Core for Oracle 的 Web UI。启动浏览器并访问 http://yourhost.yourdomain.com/ZendCore。如果使用了虚拟主机,请确保您现在正在使用的主机名是安装过程中将 Zend Core for Oracle 安装到的主机名。您将被重定向到登录页面,在该页面中,您将需要输入以前提供的口令。成功登录后,您将看到控制中心,并知道一切均正常进行。 在您执行许多其他操作之前,应进行一些实际的检查,以确认 PHP 应用程序能否与 Oracle 进行通信。在文档根目录(如果您对 apache 进行了普通的 vanilla 安装,则很可能为 /var/www/html)中创建一个名为 oratest.php 的文件。将以下代码添加到该文件,并使用适用于您的数据库的参数替换 oci_connect() 调用中的连接信息。(注意,您在此处使用的是 Oracle 示例 HR 模式,该模式是 Oracle 的入门级数据库 Oracle 数据库 10g Express Edition 附带的模式。如果缺少此模式,则可以使用 Oracle 的数据库配置助手安装它。)
<?php
$conn = oci_connect('hr', 'hr', '//aztec/orcl');
if (!$conn) {
$e = oci_error();
print htmlentities($e['message']);
exit;
}
$query = 'SELECT * FROM employees';
$sth = oci_parse($conn, $query);
if (!$sth) {
$e = oci_error($conn);
print htmlentities($e['message']);
exit;
}
$results = oci_execute($sth, OCI_DEFAULT);
if (!$results) {
$e = oci_error($sth);
print htmlentities($e['message']);
exit;
}
print '<table style="border:1px solid gray;">';
while ($row = oci_fetch_array($sth, OCI_RETURN_NULLS)) {
print '<tr>';
foreach ($row as $item) {
print '<td style="border:1px solid gray; padding:3px 5px 3px 5px;">'.($item?htmlentities($item):'?').'</td>';
}
print '</tr>';
}
print '</table>';
oci_close($conn);
?>
如果您对 oci_connect() 调用中连接字符串的语法感到迷惑不解,我将首先向您介绍新的 Oracle 10g Easy Connect 语法。如果您需要了解有关为 Oracle 配置命名方法的各种详细信息,您将在 文档中找到它们。否则,它将非常简单。最后一个参数可以使用以下语法:
//hostname[:port]/service_name访问 http://yourhost.yourdomain.com/oratest.php 应显示一个包含 HR 模式中的结果的简要表。如果看到错误,请确保 Oracle 数据库正在运行,并且在运行数据库服务器的主机上具有可用的 TNS 监听器。尽管存在错误,但也带来一个好消息:问题可能出在连接信息(而非 Zend Core),尤其是如果您看到 ORA- 错误。 更改配置 至此,Zend Core for Oracle 已安装完毕,下面您将需要进行几处更改。更改 Zend Core for Oracle 的配置有两种可用方法:命令行工具 (setup) 和 Web UI。 按照前面的方法登录到 Zend Core for Oracle 并转到配置选项卡。从该选项卡中,您会看到一些用于通过多种方法查看和更新配置的选项。Zend Core for Oracle 提供了一个易于使用的 Web UI,用于在 Configuration>PHP 和 Configuration>Extensions 选项卡上对 php.ini 文件进行更改。通过 PHP 子选项卡可以访问所有核心 PHP 指令,如 include path 和 error handling。通过 Extensions 子选项卡可以访问 php.ini 中扩展特定的指令。 点击加号展开每个部分并对 PHP 配置进行相应的更改。注意,如果更改 PHP 配置,则您将很可能需要重新启动 Web 服务器(除非以 CGI 的形式运行 PHP)。Zend Core for Oracle 提供了一种方便的方法,使您可以从 Web UI 以及在 PHP 配置屏幕的右上角执行该操作。
Zend Core for Oracle 包含所有最常用的扩展,但其中的很多扩展都默认为禁用。例如,如果您发现需要为图像操作库 GD 提供支持,则可以单击鼠标两次(一次用于启用它,另一次用于重新启动 Web 服务器)来启用 GD 扩展。 总之,Zend Core for Oracle 提供了一个优秀的抽象来配置 PHP,而不需要直接编辑配置文件。 Web UI 配置屏幕中还提供了已安装的所有 Zend 产品的设置项,这些产品有 Zend Debugger、Optimizer、Extension Manager,当然还包括 Zend Core。可以在这些屏幕上启用或禁用产品,或更改特定于特殊产品的配置设置。 可以按如下所示启动命令行工具: # cd /usr/local/Zend/Core/setup # assuming you accepted the default install location # ./setup如果您运行的是 RHEL,那么有一个问题值得注意:Red Hat 提供了一个基于 curse 的安装程序(默认情况下位于系统路径中),因此如果您忘记向 setup 命令中添加 ./,则可能无法运行正确的安装程序。如果发生这种情况,只需退出此命令并按如上所示从当前目录中重新运行该命令。 通过命令行 setup 工具可以访问许多配置更改,我将在此处对最重要的更改进行简要介绍。例如,如果在初始安装过程中未设置 Zend Network 帐户,请从 setup 工具的根目录菜单中选择 2 Update Zend Core。随后将显示另一个菜单,其中提供了大量配置选项。选择 4 Configure 更新您的帐户信息并按照生成的菜单执行操作。在第二个屏幕中,您将看到您还可以更改用于检查更新的 cron 作业的首选项。这使您可以选择是希望自动应用更新还是希望在推出新更新程序时通知您。 从该 Configure 菜单中,只需选择 Update Zend Core 即可更新到最新版本的 Zend Core。还可以选择删除不希望提供给管理员的扩展。或者,您可以回滚以前的配置更改。如果在新安装的程序包中发现错误并需要恢复到已知的状态,则回滚将会非常有用。 可以在命令行工具的菜单中找到的另一个很有用的功能是 Web UI 的口令。如果需要更改 Zend Core for Oracle 安装的口令,只需运行 setup 工具,并在第一个菜单中选择第一个选项。将提示您输入新口令两次。重新启动 Web 服务器后,更改将会生效。 使用命令行工具还可以部署到其他 Web 服务器、更改 Web 服务器配置、卸载以及更改 Web UI 口令。该工具中的大多数屏幕看起来都比较熟悉,这是因为您在初始安装过程中看到过相同屏幕。有关该工具的详细使用信息,请参考 Zend Core for Oracle 安装和维护指南 PDF。 调整 尽管该过程比较简单,我仍必须提供几个调整建议。 首先是安全性:由于在 PHP 未加载或存在其他配置问题的情况下,Apache 的默认安装不会禁止显示 .php 和 .inc 文件,因此建议将以下代码添加到 Apache 配置文件以禁止显示 .php 和 .inc 页面。(只需确保将它置于 Zend Core for Oracle 为加载 php5 模块而添加的 LoadModule 指令之后。) <IfModule !mod_php5.c> <Files ~ "\.php$"> Order allow,deny Deny from all </Files> </IfModule> <Files ~ "\.inc$"> Order allow,deny Deny from all </Files>这样做最主要的原因是防止在服务器未按预期方式启动的情况下泄露潜在的机密代码。此外,请考虑在 Configuration>PHP>Language Options 下将 expose_php 的值更改为 off。 还有许多其他与安全性相关的调整值得考虑,因此此处指出的安全性问题主要是为了让您认识到这样一个事实:安全性分析以及常备不懈对有助于对默认配置进行调整。 另一个重要调整主要针对的是 Oracle 而非 PHP。如果您习惯于使用 SID 或服务名连接到 Oracle 实例,那么您会发现一个有趣的情况:只要您的 Oracle 实例配置为侦听此类连接,那么您仍可以执行此操作。但要使用 SID,您将需要设置一个名为 TNS_ADMIN 的环境变量并将其设置为 tnsnames.ora 文件所在的路径。要设置默认服务名,请使用环境变量 TWO_TASK 并将它设置为要使用的服务名。 开始行动吧!(或者,赶快尝试吧) 至此,您已经掌握了 Oracle 和 PHP 的强大功能,下面便可以开发应用程序。这方面的内容有点超出了本文的介绍范围,但您将在 Oracle 技术网的 PHP 开发人员中心找到大量有用的最佳实践信息以及其他有帮助的技巧。但有几个事项值得在此处指出,以便帮助您进行开发。 性能监控。 Zend Core for Oracle 在您登录到 Web UI 时提供了一个方便的控制中心。在其中你可以很快找到平台的相关信息,包括描绘 Web 服务器线程功能的图形、传输总计、CPU 使用率以及磁盘空间使用率。所有这些统计信息都是在请求时监控获得的,便于您作出伸缩和性能方面的决策。
基准测试。 Zend Core for Oracle 还提供了一个用于对应用程序进行基准测试的界面。通过转到 Control Center 选项卡并选择 Benchmark,您可以测试单个现成的 PHP 脚本。只需在 Test URL 域中输入要进行基准测试的脚本的 URL,然后决定是按一组请求还是按持续时间进行测试。选择要为基准测试初始化的并行连接数,您甚至还可以在脚本需要的情况下向请求中添加标题和 cookie。(有关格式的详细信息,请参见 Zend Core for Oracle 用户指南)。单击 Run 按钮并在测试完成时查看以下显示的结果。 以下是前面我们用来测试 Zend Core for Oracle 的程序的运行结果示例:
通过使用控制中心的系统概述和基准测试屏幕组合,您获得将比以往更多的信息来调整和伸缩 Oracle 和 PHP 平台。 与 Zend Studio 集成。 如果将 Zend Studio 用作开发 IDE,那么您将很高兴地了解到 Zend Core for Oracle 可用作 Studio Server。可以对 Studio 进行配置,实现与 Zend Core for Oracle 的通信,并用作调试和配置服务器。 与 Zend 平台集成。 Zend Core for Oracle 还与 Zend Platform 完全兼容。Zend Platform 向 Zend Core for Oracle 中增加了更多的性能监控功能以及各种特性,如 PHP 和 Java 集成、会话集群以及实时系统的智能警报和故障排除。 掌握最新信息 启动并运行 Zend Core for Oracle 后,更新将变得轻而易举。注意,在安装过程中,将提示您输入 Zend Network 证书;这些证书用于在 Zend 中检查新版本的 Core 或任何已安装的扩展或组件。根据安装过程中所做的选择,更新将自动应用,或者您将在 Update 页面上收到新版本的通知。并且,您可以始终利用回滚特性将 Zend Core for Oracle 平台恢复到已知的状态(如果更新出现问题)。(可以从命令行安装工具完成回滚。)
结论 假设一切都顺利进行,此时您拥有了一个由 Zend Core for Oracle 提供的完全正常工作、可靠以及受支持的 Oracle 和 PHP 平台。我们并未介绍由 Zend 和 Oracle 推出的这个激动人心的产品的所有方面,但您现在应该对如何部署 PHP 和 Oracle 有了一个深刻的了解。
Matt Kern 多年来一直寻找并研究通过 PHP 等技术来减轻工作量的方法,主要是希望因此而获得更多的业余时间,以与家人一起徜徉于 Central Oregon 山脉。他是 Artisan Technologies Inc. 的创始人以及 Atlanta PHP 的联合创始人。 |