zoukankan      html  css  js  c++  java
  • 配置Apache 2.2+PHP 5.2.9支持OCI通过Oracle9i Client连接Oracle

    有一个问题,公司电脑上装的是Oracle9i客户端,然后使用Apache 2.2+php 5连接oracle数据库,不管如何配置都不能使用OCI

    (使用oracle 10g的客户端只要去掉php.ini的php_oci8.dll的注释就会支持oci8,我笔记本电脑上是10g的客户端一点问题都没有.但因为一些其他原因不能把oracle9i卸载掉装10g)

    从网上也找了很多资料去研读,网上有牛人给出了这样的解释.

    PHP5的oci8不兼容oracle的 oci5.1.2以上引起的
    php在设计时就是依赖于10,原因是他们认为在工作于8i兼容模式和让用户下载10的InstantClient两种取舍之间,选择了后者
    会引起问题。

    就是说如果要使PHP支持OCI连接Oracle数据库,就一定要依赖oracle client端版本10以上的函数库.

    另外oracle网站上给出了这样的解决方法

    http://www.oracle.com/technology/global/cn/pub/notes/technote_php_instant.html 中文版本

    http://www.oracle.com/technology/pub/notes/technote_php_instant.html 英文版本

    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。

    4. 编辑此环境,将 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。

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

      extension=php_oci8.dll
          

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

    6. 重新启动 Apache。

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

    <?php
    phpinfo();
    ?>
    

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

    也许是小的愚钝,说实话我完完全全按照上面的步骤进行,还是不成功,环境变量设置好了也不支持.使用phpinfo()仍然没有oci8的部分出现.

    打开命令提示符,到php的安装目录,输入php -v验证.出现

    无法定位程序输入点OCIStmtPrepare2于动态链接库OCI.dll上

    百思不得其解,明明配置好环境变量了,为什么仍旧不能定位到OCI.dll上?于是就把步骤3中的3个dll档copy到php的安装目录下,再一次的输入php -v,不再提示错误.

    使用php脚本的phpinfo()验证还是不支持oci8.嗯,也许还是环境变量配置的问题吧.

    于是就再一次的把步骤3中的3个dll档案copy到了apache的bin目录下.重启Apache,使用php脚本再一次验证,哇靠,终于出现oci8 support啦~

    删除php安装目录下的3个dll档,.重启Apache,使用php脚本再一次验证,仍然支持oci8 support.

    困扰了我一周多的问题解决.回顾一下,总结出配置的步骤如下

    前提:Apache 2.2 +php 5.2.9已配置OK

    Step 1: Instant Client 页面下载用于 Windows 的 Instant Client Basic 程序包,解压缩copy出

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

    这个三个dll 档案到apache的bin目录下.

    Step 2:去掉php.ini文件中php_oci8.dll前的注释,使PHP增加oci扩展功能.重新启动apache

    Step 3:编写php脚本

    <?php

       phpinfo();

    ?>

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

    Step 4:虽然开启了oci8支持,但要使客户端的NLS_LANG同数据库中的NLS_LANG相匹配,否则会出现另外一种错误ORA-12705: invalid or unknown NLS parameter value specified

  • 客户端修改NLS_LANG :打开注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,找到NLS_LANG键值,原来的值为NA,修改为和服务器上的一样即可

  • 设置环境变量的方法,理论上来说是正确的.但不适用于我的机器上,原因不明.在这里给出这样一种方法.权当参考.贻笑大方.

     


  • 相关阅读:
    C++--第12课
    C++--第11课
    C++--第10课
    C++--第9课
    C++--第8课
    C++--第7课
    鼠标
    MessageBox函数
    Windows对应的"Hello,world"程序
    网络上有哪些免费的教育资源?
  • 原文地址:https://www.cnblogs.com/ntearn/p/1454581.html
Copyright © 2011-2022 走看看