在 Mac OS X 10.5 (Leopard) 上安装适用于 Oracle 的 PHP 5.2作者:Tony Bibbs 如何设置 Mac 以构建基于 Oracle 的 PHP 应用程序 2009 年 2 月发表 如果您曾经参加过 PHP 大会,那么您可能会因为看到的都是 Mac 笔记本电脑而认为 Apple 是赞助商。很多携带 Mac 的 PHP 开发人员将 Linux 作为虚拟机运行,而越来越多的 PHP 开发人员本地工作在 Mac 上。认识到这一事实,Oracle 大幅简化了 Mac 上的 PHP/Oracle 应用程序开发。通过本指南,您将了解到设置 Mac 以构建基于 Oracle 的 PHP 应用程序有多容易。 前提条件在继续之前,您需要就以下事项做好准备,这一点非常重要:
准备 Apache如果是初次接触 Mac,则您可能会立即注意到 Mac 类似 Linux。但是,与 PHP 的 Linux 安装相比,有些操作是一次性的,第一个示例就是准备 Apache。 随着 OS X 10.5,Apple 开始推出 64 位版本的 Apache。其本身并没有问题,但是我使用过一些常用的 PHP 特性(如 GD),感觉比较费力。为什么?事实上,Fink 和 MacPorts 都很难明确选择 64 位版本的库,这最终会导致很多不兼容性。您可以尝试将已有的 Apache 安装降级为 32 位模式,但是我建议您从源代码编译 Apache。
安装 Oracle 即时客户端在构建 PHP 之前,我们必须首先安装 Oracle 即时客户端,它将提供允许 PHP 和 Oracle 彼此对话所需的 Oracle 挂钩。Oracle 即时客户端有两个部分:Basic(简单的 OCI 客户端)和 SDK(一个开发工具包,其中包含了在 PHP 中构建 Oracle 支持所需的开发头文件)。这两个部分都可以从 OTN 下载。 将这两个部分安装到同一目录,但该目录的位置是不相关的,这一点非常重要。本指南中,我们假设您将它们下载到了 /opt/oracle:
#> ls /opt/oracle/instantclient_10_2/验证上面的输出是否包括一个 sdk/ 目录和几个 .dylib 文件。 最后一件事:由于您使用的是 .zip 版本,因此将需要手动创建几个符号链接: #> mkdir -p /scratch/plebld/208/rdbms #> 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 期间,它将在默认目录中查找 OCI 客户端,默认目录为 scratch/plebld/208/rdbms/lib/。理论上,应该有一种方法可以重写默认目录,但据我所知,除非破坏 makefile,否则没有简单的方法来执行该操作,因为 PHP 将查找动态链接的共享库 libclntsh.dylib。其次,PHP 将始终查找动态链接的共享库 libclntsh.dylib 以便于实现升级兼容性。 构建 PHP( 注:关于已有 Apache 的建议。发布本指南之前,我尽量只将已有的 Apache 安装降级为 32 位模式,目的是避免下载、配置和安装。这在实践中非常有意义,但事实上,可能是由于已有 Apache 的构建方式,该配置惹得我冒火:不必将 Oracle 即时客户端所需的环境变量传递给 Apache,也可以使用 PHP 命令行接口很好地工作。我徒劳地尝试使用很多方法将这些环境变量传递给 Apache,但毫无效果,因此我选择从源代码安装 Apache。 ) 配置 PHP关于这一点,对于了解典型的“配置、制作、安装”过程的人来说编译 PHP 可能非常熟悉。首先配置 PHP: #> ./configure --with-apxs2 -enable-cli -with- oci8=instantclient,/opt/oracle/instantclient_10_2/现在,在进行实际构建之前,您将需要编辑生成的 makefile 以正确设置几项内容。首先,备份刚刚生成的 makefile: #> cp Makefile Makefile.backup现在将 CFLAGS_CLEAN 编译选项的一些选项添加到您将存储在 Makefile1.tmp 中的更新副本。 #> cat Makefile | sed 's/CFLAGS_CLEAN = /CFLAGS_CLEAN = -I\/usr\/include -arch i386 -isysroot \/Developer\/SDKs\/MacOSX10.5.sdk \#CFLAGS_CLEAN = /' > Makefile1.tmp同样地,将 EXTRA_LDFLAGS 编译选项的一些选项添加到存储在 Makefile2.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() 输出并确保:
设置 Parallels对 Mac/OCI8 安装进行最后测试之前,您需要设置一个运行 Oracle 数据库 XE 实例的服务器。(我们假设您已经安装了 Parallels。) 启动 Parallels Desktop。当提示要运行哪个虚拟机时,选择 New: 测试 Oracle 数据库 XE 与 PHP 的连接要确认我们的构建完全正常工作,让我们构建一个简单的脚本,该脚本将连接到 Oracle 数据库 XE 附带的示例用户 HR。执行该操作之前,您将需要使用 Oracle Application Express 或 SQL*Plus 对 HR 帐户进行解锁并设置口令。(有关如何执行该操作,请参阅 The Underground PHP and Oracle Manual。)启用 HR 用户之后,按照如下方式连接,确保替换设置以反映您的安装: <?php // Make a connection $c = oci_connect('hr', 'myhrpassword', '//myoraclehost/XE'); // Echo out what should be an Oracle resource print_r($c); ?>恭喜您!您已经在 Mac OS X 上安装了 PHP,现在可以与 Oracle 数据库 XE 一起使用了。
深入阅读
Tony Bibbs 是 PHP 和开源社区的积极参与者,目前就职于 State of Iowa,并积极提倡在政府中使用开源软件。Tony 是 Iowa 与位于 Urbandale 的 Apteno L.C. 的所有人兼软件架构师,同时还与人共同创办了运输物流公司 Two Lane Technology。 |