`

在 Linux 和 Windows 上安装 PHP 和 Oracle Instant Client

    博客分类:
  • PHP
 
阅读更多


针对 PHP 5.4 和 Oracle Database 11g 第 2 版进行了更新

2012 年 4 月更新

配置 PHP 访问远程 Oracle 数据库的最简单方法是使用 Oracle Instant Client 库。本文介绍如何在 Windows 和 Linux 上安装具有 OCI8 扩展的 PHP 和 Oracle Instant Client。免费的 PHP 和 Oracle 秘笈介绍了其他安装选项并包含更多详细信息。

OCI8 是 PHP 扩展,用于连接到 Oracle 数据库。OCI8 是开源扩展并包括在 PHP 中。名称来源于首次在 Oracle Database 版本 8中引入的 Oracle 的 C“调用接口”API。OCI8 与 Oracle 客户端库(如 Oracle Instant Client)链接。

Oracle Instant Client 是一组可轻松安装的免费库,允许程序连接到本地或远程 Oracle 数据库实例。要使用 Instant Client,需要存在一个数据库 — Instant Client 不包括数据库。通常情况下,此数据库将位于其他计算机上。如果数据库为本地数据库,则 Instant Client 尽管方便且仍可用,但通常不需要,因为 OCI8 可以直接使用数据库的库。

使用 Instant Client 11g 时,PHP OCI8 连接到所有版本的 Oracle 9.2、10.x 和 11.x 数据库。

软件要求

软件 说明
Oracle Instant Client 下载“Basic”程序包。在 Linux 上,还应下载“SDK”或“devel”程序包。如果空间很宝贵,可以使用 Basic Lite 程序包代替 Basic。
Apache HTTP Server 版本 2.2
PHP 版本 5.4


在 Windows 上启用 PHP OCI8 扩展

Instant Client 二进制文件是 PHP 的 Windows 预构建二进制文件的补充。

  1. 安装 Apache,为此从 httpd.apache.org/download.cgi 下载 httpd-2.2.22-win32-x86-no_ssl.msi

  2. 双击 MSI 文件启动安装向导。

    安装“for All Users, on Port 80”。在默认目标文件夹中进行典型安装:C:\Program Files\Apache Software Foundation\Apache2.2

  3. httpd.apache.org/download.cgi#mod_fcgid 下载 FastCGI 组件 mod_fcgid-2.3.6-win32-x86.zip

  4. 将此组件解压缩到已安装的 Apache 2.2 目录中。C:\Program Files\Apache Software Foundation\Apache2.2\modules 目录现在应该包含 mod_fcgid.somod_fcgid.pdb 文件。

  5. 编辑 C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf 并添加以下代码行:

    LoadModule fcgid_module modules/mod_fcgid.so
  6. httpd.conf 中,找到 htdocs 部分并将 ExecCGI 添加到 Options
    <Directory "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs">
    ...
    Options Indexes FollowSymLinks ExecCGI
    ...
    </Directory>
      
  7. 安装 PHP,为此从 windows.php.net/download 下载 PHP 5.4.0“VC9 x86 Non Thread Safe”ZIP 程序包 php-5.4.0-nts-Win32-VC9-x86.zip
  8. 在 Windows 资源管理器中,将 PHP 程序包解压缩到名为 C:\php-5.4.0 的目录中

     
  9. C:\php-5.4.0 中,将 php.ini-development 复制到 php.ini

  10. 编辑 php.ini,进行以下更改:
    • 添加如下时区代码行:
      date.timezone = America/Los_Angeles


      使用您的本地时区名称。

    • 添加以下代码行:

      extension_dir = C:\php-5.4.0\ext


      这是包含 PHP 扩展的目录。

    • 删除以下代码行前的分号:

      extension=php_oci8_11g.dll
      
  11. 编辑 C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf 并添加以下代码行。确保您使用正斜杠“/”而不是反斜杠“\”:

     

    FcgidInitialEnv PHPRC "c:/php-5.4.0"
    AddHandler fcgid-script .php
    FcgidWrapper "c:/php-5.4.0/php-cgi.exe" .php
    
  12. OTN Instant Client 页面下载适用于 Windows 的“Instant Client 程序包 — Basic”。因为 PHP 是 32 位,所以使用 32 位版本的 Instant Client。

     

    将 Instant Client 文件解压缩到 C:\instantclient_11_2

  13. 编辑 Windows PATH 环境设置并添加 C:\instantclient_11_2。例如,在 Windows XP 上,依次单击“开始”->“控制面板”->“系统”->“高级”->“环境变量”,在“系统变量”列表中编辑 PATH

    通常,您需要重新启动 Windows 以便正确设置新环境。

    设置所需的 Oracle 全球化语言环境变量,例如 NLS_LANG。如果不设置环境变量,则采用默认的本地环境。更多详细信息,请参见 PHP 和 Oracle 秘笈中“全球化”一章。

    取消设置 ORACLE_HOMEORACLE_SID 等 Oracle 变量,Instant Client 不需要它们。

    如果您的计算机上还有其他 Oracle 软件,则编写可设置这些值的脚本并启动 Apache,而不是修改 Windows 环境。否则,可能因版本不同引发库符号冲突。

  14. 使用系统托盘中的 Apache Monitor 或“开始”菜单选项重新启动 Apache。

在 Linux 上启用 PHP OCI8 扩展

在 Linux 上,通常手动编译 PHP,因为捆绑的版本似乎从来不是最新的。但是,如果您不希望重新编译 PHP,可以从 oss.oracle.com 获得适用于 Oracle Linux 的更新的、不受支持的 RPM 程序包,或者通过 Unbreakable Linux Network 进行更新。如果需要支持的 PHP 环境,则使用 Zend Server。所有这些组件都预构建了 OCI8 扩展。

从源代码构建 PHP 和 OCI8:

  1. 安装 Apache HTTP Server 和开发程序包,例如,使用 yum install httpd httpd-devel

  2. 下载 PHP 5.4 源代码,并按照 PHP 手册中的Unix 系统上的安装来安装 PHP。

    在此阶段,不要配置 OCI8 扩展。

  3. 从 OTN Instant Client 页面下载 Basic 和 SDK Instant Client 程序包。可以使用 zip 文件或 RPM。

    以 root 用户身份安装 RPM,例如:

    rpm -Uvh oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm 
    rpm -Uvh oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.rpm 
    

    第一个 RPM 将 Oracle 库放在 /usr/lib/oracle/11.2/client64/lib 中,第二个 RPM 在 /usr/include/oracle/11.2/client64 中创建头。

    如果您使用 ZIP 文件,应该将 SDK 解压缩到 basic 程序包所在的目录中,并手动创建符号链接:

    ln -s libclntsh.so.11.1 libclntsh.so
  4. PECL 中的最新 OCI8 扩展始终是当前版本。虽然此扩展通常与最新 PHP 5.4 源代码同步,但有时可以是更新的。可以使用以下语句自动下载最新生产扩展并将其添加到 PHP:

     

    pecl install oci8
    


    这会提供如下输出:

    downloading oci8-1.4.7.tgz ...
    Starting to download oci8-1.4.7.tgz (Unknown size)
    .....done: 168,584 bytes
    10 source files, building
    running: phpize
    Configuring for:
    PHP Api Version:         20100412
    Zend Module Api No:      20100525
    Zend Extension Api No:   220100525
    Please provide the path to the ORACLE_HOME directory.
    Use 'instantclient,/path/to/instant/client/lib' if you're compiling
    with Oracle Instant Client [autodetect] : 
    


    如果您具有 Instant Client RPM,按 Enter,PECL 将自动构建和安装 oci8.so 共享库。如果您具有 Instant Client zip 文件,或者想要使用特定版本的 Instant Client,则在“instantclient,”之后显式提供相应的路径:

    instantclient,/usr/lib/oracle/11.2/client64/lib
    

    使用显式绝对路径,因为 PECL 无法扩展环境变量。

    如果您没有 pecl 程序,也可以在浏览器中下载 OCI8 程序包并使用以下语句进行安装:

    tar -xzf oci8-1.4.7.tgz
    cd oci8-1.4.7
    phpize
    ./configure --with-oci8=instantclient,/usr/lib/oracle/11.2/client64/lib
    make install
    
  5. 编辑 php.ini 并使用以下语句启用 OCI8 扩展:
    extension=oci8.so


    还应确认 extension_dir 指向 oci8.so 文件的安装目录。

  6. 将 Instant Client 目录添加到 /etc/ld.so.conf,或者手动将 LD_LIBRARY_PATH 设置为 /usr/lib/oracle/11.2/client64/lib。您可能还要设置 Oracle 全球化语言环境变量,如 TNS_ADMINNLS_LANG。如果不设置 NLS_LANG,则采用默认的本地环境。更多详细信息,请参见 PHP 和 Oracle 秘笈中“全球化”一章。

    必须在启动 Apache 之前设置所有 Oracle 环境变量,以便正确初始化 OCI8 进程环境。在 PHP 脚本中设置环境变量可能导致明显或不明显的问题。在 Oracle Linux 上,导出 /etc/sysconfig/httpd 中的环境变量。在基于 Debian 的计算机上,在 /etc/apache2/envvars 中设置环境变量。

    重新启动 Apache,例如:

    service httpd restart


验证已安装 PHP OCI8 扩展

要检查 OCI8 配置,在 Apache 文档根目录中创建一个简单的 PHP 脚本 phpinfo.php

<?php
phpinfo();
?>


使用相应的 URL(例如 http://localhost/phpinfo.php)将此脚本加载到浏览器中。浏览器页面将包含“oci8”部分,其中显示“OCI8 Support enabled”并列出可以配置的 OCI8 选项。

连接到 Oracle 数据库

要创建连接,传递 Oracle 用户名和口令凭证作为 oci_connect() 的两个参数。Oracle 数据库名称连接标识符必须用于第三个参数,因为与 Instant Client 链接的程序始终被视为“远离”任何数据库服务器,并需要向这些程序告知要连接到的数据库实例。对于已建立的 Oracle 数据库,连接字符串可能是众所周知的。对于新系统,此信息由 Oracle 安装程序在安装数据库时提供。安装程序应该已经为您配置 Oracle 网络并创建服务名称,如 orcl

将连接信息传递给 PHP 有多种方法。此示例使用 Oracle 的简单连接语法连接到在 mymachine 上运行的 orcl 数据库服务中的 HR 模式。不需要 tnsnames.ora 或其他 Oracle 网络文件:

$conn = oci_connect('hr', 'hr_password', 'mymachine.mydomain/orcl');

有关简单连接语法,请参见 Oracle 的使用简单连接命名方法文档。

在新数据库中,需要解除对 HR 用户等演示模式的锁定并为其提供口令。也可通过在 SQL*Plus 中以 SYSTEM 用户身份连接并执行以下语句来完成此操作:

ALTER USER username IDENTIFIED BY new_password ACCOUNT UNLOCK;


使用 PHP OCI8 和 Oracle

试用简单的脚本 testoci.php 修改连接凭证以满足您的数据库要求,并将其加载到浏览器中。此示例列出了用户 HR 拥有的所有表:

<?php

$conn = oci_connect('hr', 'hr_password', 'mymachine.mydomain/orcl');

$stid = oci_parse($conn, 'select table_name from user_tables');
oci_execute($stid);

echo "<table>\n";
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) != false) {
    echo "<tr>\n";
    foreach ($row as $item) {
        echo "  <td>".($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;")."</td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";

?>


故障排除

查看 Apache 错误日志文件中是否存在启动错误。

临时在 php.ini 中设置 display_error=On,以便显示脚本错误。出于安全考虑,完成时将其切换回关闭状态。

PHP 和 Oracle 秘笈的第 9 章包含有关常见连接错误的信息,并讨论了备用的环境变量设置方法。

可以从 Instant Client 页面下载 Oracle 的 SQL*Plus 命令行工具来帮助解决环境问题和连接问题。检查 SQL*Plus 可以连接,然后确保 phpinfo.php 的 Environment 部分(而不是 Apache Environment 部分)显示相同的环境设置。

Windows 特定帮助

如果 phpinfo.php 脚本未生成显示“OCI8 Support enabled”的“oci8”部分,则确认已在 php.ini 中取消对 extension=php_oci8_11g.dll 的注释。

如果 php.ini 的 extension_dir 指令不包含具有 php_oci8_11g.dll 的目录,则启动 Apache 将显示以下警告:“PHP Startup:Unable to load dynamic library php_oci8_11g.dll.”

如果 PATH 设置错误或者根本找不到 Oracle 库,则启动 Apache 将显示以下警告:“The dynamic link library OCI.dll could not be found in the specified path.”phpinfo() 页面的 Environment 部分将显示 PATH 的值以及 PHP 实际使用的 Oracle 变量。

如果计算机上具有多个版本的 Oracle 库,则可能发生版本冲突。有关设置变量的一些讨论,请参见在 64 位 Windows 上使用 PHP OCI8 与 32 位 PHP

Linux 特定帮助

如果使用 Instant Client ZIP 文件,则确保将两个程序包解压缩到同一位置中。确保符号链接 libclntsh.so 指向 libclntsh.so.11.1

在启动 Apache 的 shell 中设置所有必要的 Oracle 环境变量。

总结

使用 Oracle Instant Client 以及通过 PECL 安装 PHP OCI8 可提供最大的灵活性,从而可轻松安装和升级组件。

可以在 OTN PHPInstant Client 论坛上发布问题和建议。

PHP 开发人员中心包含指向有用背景资料的链接。

分享到:
评论

相关推荐

    windows oracle 客户端 instant client 12.2

    在本案例中,我们关注的是针对Windows 64位系统的版本,即"Instant Client for Microsoft Windows (x64)",具体版本号为12.2.0.1.0,压缩包文件名为"instantclient-basic-windows.x64-12.2.0.1.0.zip"。 **Oracle ...

    instantclient-basic-linux.x64-21.1.0.0.0.zip

    Oracle Instant Client是Oracle公司提供的一款轻量级数据库连接器,用于在Linux x64平台上与Oracle数据库进行交互。"instantclient-basic-linux.x64-21.1.0.0.0.zip" 是该组件的特定版本,表示适用于64位Linux系统的...

    php安装扩展_instantclient11.2-_-basic_11.2.0.3.0_oracle_1.x86_64_安装扩展.zip

    标题中的“php安装扩展_instantclient11.2-_-basic_11.2.0.3.0_oracle_1.x86_64_安装扩展.zip”指的是在PHP环境中安装Oracle数据库的Instant Client 11.2版本,这是一个用于连接到Oracle数据库的轻量级客户端库。...

    phporacle扩展linux下php安装oracle扩展

    在Linux环境下为PHP安装Oracle扩展是一项常见的任务,特别是在需要与Oracle数据库进行交互的Web应用程序中。Oracle数据库以其稳定性、安全性和高性能而闻名,因此许多企业选择它作为后端存储。PHP作为广泛使用的...

    oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.zip

    总之,"oracle-instantclient11.2-devel-11.2.0.3.0-1.x86_64.zip"是一个专为64位Linux系统设计的Oracle Instant Client开发包,它为开发者提供了连接和操作Oracle数据库的必要工具和库,简化了开发环境的搭建,并...

    instantclient_12_1.rar官方下载

    5. **其他库文件**:如ocijdbc12.jar(Java JDBC驱动),odbcinst.ini(ODBC配置),ocijdbc12.dll(Windows上的JDBC驱动),以及用于其他编程语言的接口库,如PHP、Python等。 使用Oracle Instant Client,开发者...

    Instant Client_32&amp;64.rar

    Oracle Instant Client是Oracle公司提供的一款客户端软件,它允许开发者和系统管理员在本地计算机上与远程Oracle数据库进行通信。这个工具包含了一系列库文件,用于支持SQL*Plus、ODBC、JDBC、PHP和.NET等接口,...

    instantclient-basic-linux.zseries64-19.21.0.0.0dbru.zip

    在安装和使用Oracle Instant Client时,以下是一些关键知识点: 1. **安装路径**:通常,Instant Client被安装在系统的特定目录下,如 `/opt/oracle/instantclient_19_21`。 2. **环境变量设置**:需要设置 `LD_...

    instantclient版本集合大全

    Oracle Instant Client是一款轻量级的数据库连接工具,用于在客户端计算机上快速建立与Oracle数据库服务器的连接,无需安装完整的Oracle数据库客户端。这个压缩包文件集合包含三个不同版本的Instant Client:10.2、...

    instantclient12.1[base.devel,sqlplus].x86_64

    在这个案例中,"instantclient12.1 x86_64"的RPM包将帮助在系统上安装Oracle Instant Client,而“php rpm 安装 oci 和pdo_oci”则意味着我们需要找到对应的PHP OCI8和PDO_OCI扩展的RPM包,以便PHP能够连接并操作...

    instantclient-basic-nt-19.22.0.0.0dbru

    标题中的"instantclient-basic-nt-19.22.0.0.0dbru"指的是适用于Windows NT(32位或64位)操作系统的Oracle Instant Client的基础版本,版本号为19.22.0.0.0。这个版本包含了运行大多数Oracle数据库应用所需的最小...

    instantclient_12_2.rar

    1. **连接功能**:Instant Client提供了oci、sqlnet、tnslistener等组件,允许应用程序通过ODBC、JDBC、PHP等接口连接到Oracle数据库,无需在客户端机器上安装完整的数据库服务。 2. **基本组件**:主要包括oci.dll...

    instantclient文件.rar

    Oracle Instant Client是一款轻量级的Oracle数据库连接工具,它允许应用程序在无需完整Oracle数据库客户端安装的情况下,与Oracle数据库服务器进行通信。这个“instantclient文件.rar”压缩包包含了实现这一功能所需...

    php7.0扩展oci8安装(连接oracle扩展包与详细安装过程)

    2. 配置环境变量:在安装Oracle Instant Client后,你需要设置一些环境变量,如`LD_LIBRARY_PATH`(在Linux上)或`PATH`(在Windows上),以便PHP能找到Oracle的库文件。例如,在Linux上,你可能需要添加如下行到`~/...

    oracle-instantclient11.2-11.2.0.4.0-1.x86-64

    在安装这些RPM包后,用户或开发人员将能够连接到远程Oracle数据库,执行SQL查询,开发和测试Oracle数据库驱动的应用程序。为了正确配置Instant Client,通常需要设置环境变量,如ORACLE_HOME指向安装目录,LD_...

    instantclient_12_2客户端

    例如,在Windows上,可以将`C:\path\to\instantclient_12_2`添加到用户或系统环境变量的PATH中。 - **设置LIBRARY_PATH**: 对于某些平台,如Linux,可能还需要设置`LD_LIBRARY_PATH`,使其指向`instantclient_12_2`...

    oracle安装版的客户端InstantClientSetup

    2. **解压**:将下载的`.exe`(Windows)或其他平台的压缩包解压到一个指定的目录,通常建议选择一个不会被频繁更改的位置,如`C:\Oracle\InstantClient`。 3. **环境变量设置**:为了使系统能找到Oracle Instant ...

    LINUX下安装PHP的oci8和PDO_OCI扩展包

    压缩包中的`oracle-instantclient11.2-basic-11.2.0.3.0-1.i386.rpm`、`oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.i386.rpm`和`oracle-instantclient11.2-devel-11.2.0.3.0-1.i386.rpm`分别是Oracle Instant ...

    instantclient-basic-windows.x64-12.1.0.2.0

    总结,"instantclient-basic-windows.x64-12.1.0.2.0"是一个针对64位Windows系统的Oracle Instant Client版本,它为开发者提供了轻量级的数据库连接解决方案,支持多种编程接口,并具备良好的性能和资源管理能力。...

    instantclient-basic-macosx-10.1.0.3.zip

    - 数据库连接:Instant Client提供了连接Oracle数据库的必要组件,如oci.dll(在Unix/Linux系统中为libclntsh.so)和其他相关库,使得用户能够通过ODBC、JDBC、PHP等接口进行连接。 - SQL*Plus支持:包含SQL*Plus...

Global site tag (gtag.js) - Google Analytics