在 Mac OS X 10.5 (Leopard) 上安装适用于 Oracle 的 PHP 5.2

时间:2022-05-06 07:15:35

如果您曾经参加过 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。

  1. 首先  下载源代码并对其进行解压缩(我们假设您将其放到 /path/to/httpd 中)。
  2. 现在配置 Apache:
    #> cd /path/to/httpd
    #>./configure -enable-layout=Darwin -enable-mods-shared=all
  3. 最后构建 Apache:
    #> make 
    #> make install

安装 Oracle 即时客户端

在构建 PHP 之前,我们必须首先安装 Oracle 即时客户端,它将提供允许 PHP 和 Oracle 彼此对话所需的 Oracle 挂钩。Oracle 即时客户端有两个部分:Basic(简单的 OCI 客户端)和 SDK(一个开发工具包,其中包含了在 PHP 中构建 Oracle 支持所需的开发头文件)。这两个部分都可以从 OTN  下载

将这两个部分安装到同一目录,但该目录的位置是不相关的,这一点非常重要。本指南中,我们假设您将它们下载到了 /opt/oracle:

  1. 将用于 OS X 的 Basic 客户端下载到 /opt/oracle。其名称应该类似于“instantclient-basic-macosx-X.Y.Z.zip”,其中“X.Y.Z”是客户端的当前版本。
  2. 将 SDK 下载到 /opt/oracle。其名称应该类似于“instantclient-sdk-macosx-X.Y.Z.zip”,其中“X.Y.Z”是 SDK 的当前版本。
  3. 解压缩基本客户端。
  4. 解压缩 SDK。
完成后,确认您已对二者进行了正确解压缩:
#> 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() 输出并确保:
  • “Configure Command”包括您为其提供的 -with-oci8 选项
  • “OCI8”部分存在并显示为已启用
  • “Apache Environment”部分显示指向您的即时客户端位置(即 /opt/oracle/instantclient_10_2)的 DYLIB_LIBRARY_PATH 变量

设置 Parallels

对 Mac/OCI8 安装进行最后测试之前,您需要设置一个运行 Oracle 数据库 XE 实例的服务器。(我们假设您已经安装了 Parallels。)

启动 Parallels Desktop。当提示要运行哪个虚拟机时,选择  New

在 Mac OS X 10.5 (Leopard) 上安装适用于 Oracle 的 PHP 5.2

然后对于操作系统,选择   Custom

在 Mac OS X 10.5 (Leopard) 上安装适用于 Oracle 的 PHP 5.2

然后选择   Linux  作为   OS Type ,选择   Other Linux Kernel 2.6  作为   OS Version

在 Mac OS X 10.5 (Leopard) 上安装适用于 Oracle 的 PHP 5.2

由于 Oracle 是世界级的 DBMS,因此您要确保为其提供足够多的 RAM。如果不这样做,Oracle 安装将无法正常工作。我为这个新的虚拟机提供了 2048MB:

在 Mac OS X 10.5 (Leopard) 上安装适用于 Oracle 的 PHP 5.2

然后选择“Create a new hard disk image”:

在 Mac OS X 10.5 (Leopard) 上安装适用于 Oracle 的 PHP 5.2

对于联网选项,我选择   Host-only networking ,这意味着我们的新虚拟机可以看见 Mac 和其他基于 Parallels 的虚拟机,但它们不会暴露给您的公司网络或互联网:

在 Mac OS X 10.5 (Leopard) 上安装适用于 Oracle 的 PHP 5.2

然后为您的虚拟机选择一个相同的名称。在本例中,我们运行的是 Kubuntu:

在 Mac OS X 10.5 (Leopard) 上安装适用于 Oracle 的 PHP 5.2

然后您将希望优化您的虚拟机,如下所示:

在 Mac OS X 10.5 (Leopard) 上安装适用于 Oracle 的 PHP 5.2

之后,只需插入 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 
// 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 一起使用了。

 

深入阅读