如果您曾经参加过 PHP 大会,那么您可能会因为看到的都是 Mac 笔记本电脑而认为 Apple 是赞助商。很多携带 Mac 的 PHP 开发人员将 Linux 作为虚拟机运行,而越来越多的 PHP 开发人员本地工作在 Mac 上。认识到这一事实,Oracle 大幅简化了 Mac 上的 PHP/Oracle 应用程序开发。通过本指南,您将了解到设置 Mac 以构建基于 Oracle 的 PHP 应用程序有多容易。
前提条件
在继续之前,您需要就以下事项做好准备,这一点非常重要:
- 装有 Mac OS X 10.5.x 的基于 Intel 的 Apple 计算机
- 可以访问已经运行 Oracle 数据库实例的服务器。对于此演示,我们将使用 Oracle 数据库 10g 快捷版 (XE),该数据库运行在来自 Parallels 虚拟机的 Kubuntu 实例上。对不起,Oracle 数据库 XE 将不会本地运行在 Mac 上。
- Xcode 3.1 — Xcode 以及其他内容,包括用来构建 PHP 的 C 编译器。Apple Developer Connection 会员可免费使用。
- Fink 或 MacPorts(可选)— 提供开发库,以满足您构建 PHP 所需的特性要求。
- 熟悉终端和运行命令
准备 Apache
如果是初次接触 Mac,则您可能会立即注意到 Mac 类似 Linux。但是,与 PHP 的 Linux 安装相比,有些操作是一次性的,第一个示例就是准备 Apache。
随着 OS X 10.5,Apple 开始推出 64 位版本的 Apache。其本身并没有问题,但是我使用过一些常用的 PHP 特性(如 GD),感觉比较费力。为什么?事实上,Fink 和 MacPorts 都很难明确选择 64 位版本的库,这最终会导致很多不兼容性。您可以尝试将已有的 Apache 安装降级为 32 位模式,但是我建议您从源代码编译 Apache。
- 首先 下载源代码并对其进行解压缩(我们假设您将其放到 /path/to/httpd 中)。
- 现在配置 Apache:
#> cd /path/to/httpd
#>./configure -enable-layout=Darwin -enable-mods-shared=all - 最后构建 Apache:
#> make
#> make install
安装 Oracle 即时客户端
在构建 PHP 之前,我们必须首先安装 Oracle 即时客户端,它将提供允许 PHP 和 Oracle 彼此对话所需的 Oracle 挂钩。Oracle 即时客户端有两个部分:Basic(简单的 OCI 客户端)和 SDK(一个开发工具包,其中包含了在 PHP 中构建 Oracle 支持所需的开发头文件)。这两个部分都可以从 OTN 下载。
将这两个部分安装到同一目录,但该目录的位置是不相关的,这一点非常重要。本指南中,我们假设您将它们下载到了 /opt/oracle:
- 将用于 OS X 的 Basic 客户端下载到 /opt/oracle。其名称应该类似于“instantclient-basic-macosx-X.Y.Z.zip”,其中“X.Y.Z”是客户端的当前版本。
- 将 SDK 下载到 /opt/oracle。其名称应该类似于“instantclient-sdk-macosx-X.Y.Z.zip”,其中“X.Y.Z”是 SDK 的当前版本。
- 解压缩基本客户端。
- 解压缩 SDK。
#> ls /opt/oracle/instantclient_10_2/验证上面的输出是否包括一个 sdk/ 目录和几个 .dylib 文件。
最后一件事:由于您使用的是 .zip 版本,因此将需要手动创建几个符号链接:
#> mkdir -p /scratch/plebld/208/rdbms需要执行上述操作的原因有两个:首先,在我们构建 PHP 期间,它将在默认目录中查找 OCI 客户端,默认目录为 scratch/plebld/208/rdbms/lib/。理论上,应该有一种方法可以重写默认目录,但据我所知,除非破坏 makefile,否则没有简单的方法来执行该操作,因为 PHP 将查找动态链接的共享库 libclntsh.dylib。其次,PHP 将始终查找动态链接的共享库 libclntsh.dylib 以便于实现升级兼容性。
#> ln -s /opt/oracle/instantclient_10_2/ /scratch/plebld/208/rdbms/lib
#> ln -s /opt/oracle/instantclient_10_2/libclntsh.dylib.10.1 /opt/oracle/instantclient_10_2/libclntsh.dylib
构建 PHP
( 注:关于已有 Apache 的建议。发布本指南之前,我尽量只将已有的 Apache 安装降级为 32 位模式,目的是避免下载、配置和安装。这在实践中非常有意义,但事实上,可能是由于已有 Apache 的构建方式,该配置惹得我冒火:不必将 Oracle 即时客户端所需的环境变量传递给 Apache,也可以使用 PHP 命令行接口很好地工作。我徒劳地尝试使用很多方法将这些环境变量传递给 Apache,但毫无效果,因此我选择从源代码安装 Apache。 )
配置 PHP
关于这一点,对于了解典型的“配置、制作、安装”过程的人来说编译 PHP 可能非常熟悉。首先配置 PHP:
#> ./configure --with-apxs2 -enable-cli -with-现在,在进行实际构建之前,您将需要编辑生成的 makefile 以正确设置几项内容。首先,备份刚刚生成的 makefile:
oci8=instantclient,/opt/oracle/instantclient_10_2/
#> cp Makefile Makefile.backup现在将 CFLAGS_CLEAN 编译选项的一些选项添加到您将存储在 Makefile1.tmp 中的更新副本。
#> cat Makefile | sed 's/CFLAGS_CLEAN = /CFLAGS_CLEAN =同样地,将 EXTRA_LDFLAGS 编译选项的一些选项添加到存储在 Makefile2.tmp 中的另一个更新副本。
-I\/usr\/include -arch i386 -isysroot
\/Developer\/SDKs\/MacOSX10.5.sdk \#CFLAGS_CLEAN = /' >
Makefile1.tmp
#> cat Makefile1.tmp | sed 's/EXTRA_LDFLAGS =删除剩余的文件:
/EXTRA_LDFLAGS = -arch i386 -isysroot
\/Developer\/SDKs\/MacOSX10.5.sdk -Wl,-
syslibroot,\/Developer\/SDKs\/MacOSX10.5.sdk
\#EXTRA_LDFLAGS = /' > Makefile2.tmp
#> rm Makefile Makefile1.tmp现在,将更新的 makefile 放回到原位:
#> mv Makefile2.tmp Makefile
编译 PHP
现在,您已做好构建准备:
#>make如果没有错误,即可安全地进行安装。
#>make install
安装后(Apache 环境变量)
现在,已经差不多完成了。您需要做的最后一件事是确保设置 DYLD_LIBRARY_PATH。为此,编辑 /private/etc/apache2/httpd.conf 并将以下内容添加到该文件的顶部:
SetEnv DYLD_LIBRARY_PATH /opt/oracle/instantclient_10_2设置这些之后,务必重新启动 Apache:
#> apachectl stop
#> apachectl start
验证构建
既然您已经完成构建,现在应该验证一切是否如愿。要完成该操作,请通过以下代码在您的 Web 服务器的文档根目录中创建一个 PHP 文件(如 info.php):
<?php phpinfo(); ?>现在,在您的浏览器中查看 phpinfo() 输出并确保:
- “Configure Command”包括您为其提供的 -with-oci8 选项
- “OCI8”部分存在并显示为已启用
- “Apache Environment”部分显示指向您的即时客户端位置(即 /opt/oracle/instantclient_10_2)的 DYLIB_LIBRARY_PATH 变量
设置 Parallels
对 Mac/OCI8 安装进行最后测试之前,您需要设置一个运行 Oracle 数据库 XE 实例的服务器。(我们假设您已经安装了 Parallels。)
启动 Parallels Desktop。当提示要运行哪个虚拟机时,选择 New:
然后对于操作系统,选择 Custom : 然后选择 Linux 作为 OS Type ,选择 Other Linux Kernel 2.6 作为 OS Version : 由于 Oracle 是世界级的 DBMS,因此您要确保为其提供足够多的 RAM。如果不这样做,Oracle 安装将无法正常工作。我为这个新的虚拟机提供了 2048MB: 然后选择“Create a new hard disk image”: 对于联网选项,我选择 Host-only networking ,这意味着我们的新虚拟机可以看见 Mac 和其他基于 Parallels 的虚拟机,但它们不会暴露给您的公司网络或互联网: 然后为您的虚拟机选择一个相同的名称。在本例中,我们运行的是 Kubuntu: 然后您将希望优化您的虚拟机,如下所示: 之后,只需插入 Kubuntu CD 并运行其安装程序即可。完成后,您将希望使用 The Underground PHP and Oracle Manual 来安装 Oracle 数据库 XE 并使其工作。测试 Oracle 数据库 XE 与 PHP 的连接
要确认我们的构建完全正常工作,让我们构建一个简单的脚本,该脚本将连接到 Oracle 数据库 XE 附带的示例用户 HR。执行该操作之前,您将需要使用 Oracle Application Express 或 SQL*Plus 对 HR 帐户进行解锁并设置口令。(有关如何执行该操作,请参阅 The Underground PHP and Oracle Manual。)启用 HR 用户之后,按照如下方式连接,确保替换设置以反映您的安装:
<?php恭喜您!您已经在 Mac OS X 上安装了 PHP,现在可以与 Oracle 数据库 XE 一起使用了。
// Make a connection
$c = oci_connect('hr', 'myhrpassword', '//myoraclehost/XE');
// Echo out what should be an Oracle resource
print_r($c);
?>
深入阅读
- OTN 的 PHP 开发中心 — 有关结合使用 PHP 与 Oracle 的一站式技术信息服务网站
- Underground PHP and Oracle Manual — 此开发人员指南将向您介绍有关开发、部署和优化 PHP 和 Oracle 应用程序的几乎所有信息。
- “如何在 MacOS X Leopard 10.5.4 上安装 PHP5、OCI8、Oracle Client v10.2 和 SqlPlus”,作者 Danilo Vizzarro — 该网志包含了大量有用的提示。