正确安装php_oci8扩展的方法

工作   1688阅读

事情源于需要利用公司内部数据库来写程序,内部数据库是ORACLE,如何能够在php里连接到ORACLE数据库,突然成了一个难题。百度、google查了不少资料,但都比较片面,按照教程,反复的安装、配置,都没有成功。最后,反复摸索,终于找到了正确安装php_oci8扩展的方法。

  1. 以windows为例

  2. 下载apache和php的压缩包,解压在硬盘目录,配置apache+php环境,能够解析php文件

    apache下载网址:http://www.apachelounge.com/download/

    apachelounge是官方推荐的下载地址,已经是编译好的,根据自己的电脑是32位的或者64位的,选择正确的版本,需要注意的是选择vc11或者vc14,因此还需要下载vc++的环境包。

    我下载的php版本是PHP 5.6 (5.6.28),VC11 x64 Thread Safe,

    提前在电脑上安装vc++2012,下载Visual C++ Redistributable for Visual Studio 2012 Update 4(http://www.microsoft.com/zh-CN/download/details.aspx?id=30679)安装,否则在运行apache的时候会弹出错误警告,内容时**.dll无法加载。

    apache作为web服务器时要选择Thread Safe;IIS则选择Non Thread Safe

    接下来做两件事情,把apache和php分别解压,在apahce目录下的bin目录,在cmd界面运行httpd.exe -k install来安装apache2.4的服务,然后在conf目录,增加加载php的配置。启动apache,支持php。

    安装oci8扩展
    首先安装oracle instantclient。
    在oracle官网上下载oracle的instant client(http://www.oracle.com/technetwork/topics/winx64soft-089540.html ),选择自己对应的版本(比如11.2.0.1.0),下载instantclient-basic-win-x86-64-11.2.0.1.0.zip和instantclient-sdk-win-x86-64-11.2.0.1.0.zip这两个压缩包。将basic压缩包解压,比如目录是c:/instantclient,SDK压缩包解压出来,路径为c:/instantclient/sdk。
    将client路径和sdk路径加入到系统path环境变量中。这个非常关键,要不然后面会遇到“php_oci_11g.dll不是标准的win32应用程序”这样的错误
    还需要oci8的扩展文件,可以在pecl.php.net(http://pecl.php.net/package/oci8/2.0.12/windows)下载dll文件,php5.6可以选择oci8 2.0.12版本的,下载的压缩包内有一个php_oci8_11g.dll文件,将这个文件保存到php目录下的ext目录中,然后在php.ini中增加extension=php_oci8_11g.dll,还要记得修改extension_dir的路径。

    安装上面的步骤做下来,就可以成功的安装oci8扩展,在phpinfo里会看到如下内容:
    2016-12-07 22-30-03屏幕截图.png

  3. linux环境安装oci8扩展

    安装oracle instant client,配置环境变量ORACLE_HOME,LD_LIBRARY_PATH,(比如我的电脑上ORACLE_HOME是/usr/lib/oracle/11.2/client64,LD_LIBRARY_PATH是/usr/lib/oracle/11.2/client64/lib)
    linux环境下需要自己下载oci的源代码自己编译,编译参数是./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64
    然后make,make install,完成之后会在/usr/lib64/php/modules目录下生成oci8.so文件,同样在php.ini中增加extension=oci8.so,然后重启apache,发现并没有加载oci8扩展。
    查看apache的错误日志,发现是被selinux拦截了。因此执行setenforce 0,然后重新启动apache,查看phpinfo(),这个时候就发现oci8扩展已经成功加载了。

  4. 以上过程是根据记忆来写的,如果如果参照做的时候不能成功,可以在底下留言。

喜欢请常来,打赏请随意。