首页 > 数据库 > Oracle > 正文

为Linux和Windows安装PHP和Oracle

2024-08-29 13:32:42
字体:
来源:转载
供稿:网友

oracle 10g instant client(免费下载)是php 与远程 oracle 数据库连接的最简单方式,它只需要安装三个库。

  php 访问 oracle 的当前 api 所使用的 instant client 库称作 oci8.(此 c 接口的名称最早是在 oracle8 中引入的。)php oracle 8 函数 可以直接调用 oracle 8.1.7、9.x 或 10.x,或者也可以为了方便起见,使用可选的抽象类,如 pear mdb2 和 adodb。

  instant client 也可以使用老版本的 php“oracle”扩展,但它调用不赞成使用的 oracle api。php 界或 oracle 建议不要使用此扩展进行新的开发。

  要在 apache 上将 instant client 与 php 4 或 连用,请遵循以下步骤。需要一个现有的 oracle 数据库;instant client 不提供 oracle 数据库。通常情况下,此数据库将位于其他计算机上。如果数据库位于本地,则 oracle 组件一般早已可用,从而不需要 instant client。

  软件需求:  

软件附注
oracle instant client下载“instant client package - basic”。在 linux 上,还应下载“instant client package - sdk”。
apache httpd serverphp 界仍推荐 apache 1.3
php — php 超文本处理器4.3 版或更高版本

  在 windows 上启用 php oci8 扩展

  instant client 二进制文件是 php 的 windows 预构建二进制文件的补充。

  1. 下载 php 二进制压缩文件(不是安装程序版本)和 apache。按照 php 手册中的 windows 系统上的安装安装它们。otn 的开放源代码开发人员中心包含有用背景资料的链接,如“在 windows 2000/xp 上安装 oracle、php 和 apache”,它介绍了如何安装传统、完整的 oracle 10g 版本(instant client 不需要此版本)。

    继续操作之前检查 php 是否正常运行。此阶段未启用 oracle 支持。

  2. 从 otn 的 instant client 页面下载用于 windows 的 instant client basic 程序包。此压缩文件的大小大约为 30mb。

  3. 创建一个子目录(例如,c:/instantclient10_1),然后从压缩文件中复制以下库:

    • oraociei10.dll
    • orannzsbb10.dll
    • oci.dll

这三个文件的总大小大约为 80mb。

要使用 php 老版本的“oracle”扩展(在 php.ini 中使用“extension=php_oracle.dll”启用),则复制 ociw32.dll 而非 oci.dll。

  • 编辑此环境,将 c:/instantclient10_1 添加到 path 中(位于其他 oracle 目录之前)。

    例如,在 windows 2000 上,依次单击“开始”->“设置”->“控制面板”->“系统”->“高级”->“环境变量”,编辑系统变量列表中的 path。

    如果使用了 tnsnames.ora 文件定义 oracle net 服务名称,则将 tnsnames.ora 复制到 c:/instantclient10_1,并将用户环境变量 tns_admin 设置为 c:/instantclient10_1。也可以在用户环境变量 local 中定义默认的服务名称。

    设置必要的 oracle 全球化语言环境变量,如 nls_lang。如果没有设置,则使用默认的本地环境。有关更多详细信息,请参见 oracle php 应用程序全球化概述。

    无需设置不必要的 oracle 变量,如 oracle_home 和 oracle_sid。

  • 编辑 php.ini,并不要将 oci8 扩展设为注释:

    extension=php_oci8.dll

    将 extension_dir 指令设置为完整的 php 扩展 dll 路径。在 php 4 中,dll 位于 php 软件的“extensions”子目录中。在 php 5 中,它们位于“ext”中。

  • 重新启动 apache。

        要检查是否配置了扩展,请在 web 服务器可以读取的地方创建一个简单的 php 脚本。

      phpinfo();
      ?>

        使用“http://”url 将此脚本加载到浏览器中。浏览器页面应包含一个显示 “oci8 support enabled”的“oci8”部分。

    1. 在 linux 上启用 php oci8 扩展

       要在 linux 上添加 oracle 连接,需要重新编译 php。

        开放源代码开发人员中心包含有用背景资料的链接,如在 linux 上安装 oracle、php 和 apache,它介绍了如何安装传统、完整的 oracle 10g 版本(instant client 不需要此版本)。

      1. 下载并安装 apache。例如,在您的主目录中安装它:
        cd apache_1.3.31./configure --enable-module=so 

        --prefix=$home/apache

        --with-port=8888makemake install

        编辑 $home/apache/conf/httpd.conf 并添加:

        addtype application/x-httpd-php .phpaddtype application/x-httpd-php-source .phps
      2. 下载并解压缩 php。

      3. 从 otn 上的 instant client 页面下载 basic 和 sdk instant client 程序包。这两个 rpm 的总大小大约为 30mb。

      4. 以 root 用户的身份安装 rpm。

        rpm -uvh oracle-instantclient-basic-10.1.0.3

        -1.i386.rpmrpm -uvh oracle-instantclient-devel

        -10.1.0.3-1.i386.rpm

        第一个 rpm 将 oracle 库置于 /usr/lib/oracle/10.1.0.3/client/lib 中,第二个 rpm 在 /usr/include/oracle/10.1.0.3/client 中创建头 (header)。

      5. 备份此补丁,然后将它应用于 php 的 ext/oci8/config.m4。该补丁的行号是基于 php 4.3.9 的。如果已修复了 php 错误 31084(很有可能已在 php 4.3.11 和 5.0.4 中修复),则不需要此补丁。

        如果使用的是 php 4.3.9 或 4.3.10,则可以将此补丁保存到一个文件中(如 php_oci8ic_buildpatch),然后使用以下命令安装它:

        patch -u config.m4 php_oci8ic_buildpatch

        此补丁创建一个新的 php 配置参数:--with-oci8-instant-client[=dir].在 linux 上,默认情况下,它使用从 rpm 中安装的最新版本的 instant client。可以指定 oracle 库所在的目录来使用其他版本。无论在哪种情况下,都将自动使用正确的 sdk 头。

      新参数与现有的 --with-oci8 参数互斥。

      例如:在非 linux 平台上,将 instant client 程序包解压缩到您所选择的目录中。--with-oci8-instant-client 参数将需要明确指定此目录;例如,--with-oci8-instant-client=/home/instantclient10_1。应将 instant client sdk 解压缩到与基本程序包相同的目录中,以便薷暮蟮呐渲媒疟究梢哉业酵肺募淖幽柯肌?

    2. 在顶层 php 目录中重新构建“configure”脚本。
      cd php-4.3.9rm -rf autom4te.cache config.cache./buildconf --force
    3. 使用新选项运行 configure。此示例使用安装在主目录中的 apache。

      ./configure /--with-oci8-instant-client /--prefix=$home/php 

      --with-apxs=$home/apache/bin/apxs

      /--enable-sigchild --with-config-file-path=$home

      /apache/conf

    4. 重建 php。

      makemake install
    5. 将 php 配置复制到 --with-config-file-path 指定的位置

      cp php.ini-recommended $home/apache/conf/php.ini
    6. 将 ld_library_path 设置为 /usr/lib/oracle/10.1.0.3/client/lib 并重新启动 apache。

      如果使用了 tnsnames.ora 文件定义 oracle net 服务名称,则将 tns_admin 设置为包含此文件的目录。

      启动 apache 之前应设置所有 oracle 环境变量。以下脚本可以帮助完成此操作:

      #!/bin/shapachehome=/home/apacheld_library_path

      =/usr/lib/oracle/10.1.0.3/client/lib:

      ${ld_library_path}tns_admin

      =/homeexport ld_library_path tns_adminecho

      starting apache $apachehome/apachectl start

    7.  

      要确认是否配置了扩展,请在 web 服务器可以读取的地方创建一个简单的 php 脚本。

      phpinfo();
      ?>

        使用类似“http://localhost:8888//phpinfo.php”的 url 将此脚本加载到浏览器中。浏览器页面应包含一个显示“oci8 support enabled”的“oci8”部分。

        连接到 oracle

        oracle 连接信息被传递给 ocilogon() 来创建连接。与 instant client 关联的工具通常“远离”任何数据库服务器,因此必须将 oracle net 连接标识符与用户名和口令一起使用。对于已建立的 oracle 数据库,连接信息有可能是众所周知的。对于新系统,此信息由 oracle 安装程序在安装数据库时提供。此安装程序应配置了 oracle net 和创建了一个服务名称。

        在新数据库中,可能需要将演示模式(如 hr 用户)解除锁定并向其提供口令。也可通过在 sql*plus 中以 system 用户身份连接并执行以下语句来完成此操作:

      alter user 用户名 identified by 新口令 account unlock;

        将连接信息传递给 php 有多种方法。第一个示例使用 oracle 10g的 easy connect 语法连接到 在 mymachine 上运行的 mydb 数据库服务中的 hr 模式。不需要 tnsnames.ora 或其他 oracle network 文件:

        $c = ocilogon('hr', 'hr_password', '//mymachine.mydomain/mydb');

        有关 easy connect 的语法,请参见 oracle 的使用 easy connect 命名方法文档。

        或者,如果 /home/tnsnames.ora 包含:

      mydb =
      (description=
      (address = (protocol = tcp)(host = mymachine.mydomain)(port = 1521))
      (connect_data=
      (server = dedicated)
      (service_name = mydb)
          )
        )

      且 tns_admin 环境变量设置为 /home(在启动 apache 之前),则连接字符串可以为:

      $c = ocilogon('hr', 'hr_password', 'mydb');

        如果环境变量 local(在 windows 上)或 two_task (在 linux 上)设置为 mydb,则可以使用以下代码生成与 mydb 连接:

      $c = ocilogon('hr', 'hr_password');
        使用 oracle

        当基本连接可以使用时,试着运行一个简单的脚本 testoci.php。根据您的数据库修改该连接的详细信息并在浏览器中加载它。此示例列出了用户 hr 拥有的所有表:

      $conn = ocilogon("hr", "hr_password", '//mymachine.mydomain:port/mydb);
      $query = 'select table_name from user_tables';
      $stid = ociparse($conn, $query);
      ociexecute($stid, oci_default);
      while ($succ = ocifetchinto($stid, $row)) {
      foreach ($row as $item) {
      echo $item." ";
          }
      echo "
      /n";
       }
      ocilogoff($conn);
       ?>
        故障诊断

        oracle php 故障诊断常见问题解答包含有关连接 oracle 的有用信息。

        可以从 instant client 页面下载 oracle 的 sql*plus 命令行工具来帮助解决环境问题和连接问题。另请参见 sql*plus instant client 版本说明。

       检查 sql*plus 使用的环境是否与 phpinfo.php 显示的环境相同。

        windows 帮助

      如果 phpinfo.php 脚本没有生成显示“oci8 support enabled”的“oci8”部分,则确认在 php.ini 中没有将“extension=php_oci8.dll”设为注释。

        如果 path 设置错误,或找不到 oracle 库,则启动 apache 将显示警告:“在指定的路径中找不到动态链接库 oci.dll。”phpinfo() 页面的 environment 部分将显示 path 的值以及 php 实际使用的 oracle 变量。

        如果 php.ini 的 extension_dir 指令不正确,则在启动 apache 将显示警告:“php 启动:无法加载动态库 php_oci8.dll。”

        linux 帮助

        仔细检查是否正确修复了 config.m4。如果“configure”失败,则检查 config.log 文件。还原 config.m4,删除缓存文件,运行 ./buildconf --force and configure,验证问题是否与所做的更改相关。

        确保“configure”上的时间戳是当前的。删除所有缓存文件,并在必要时重建它。

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

        结论

        希望本文对您能有所帮助。您可以在 otn instant client 或 php 论坛上发表问题和建议。

    8. 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
    9. 发表评论 共有条评论
      用户名: 密码:
      验证码: 匿名发表