Win环境下配置Apache+PHP读取Oracle数据库

PHP,Oracle

记录一下自己在 win 环境下配置 Apache 和 PHP 并成功连接 Oracle 数据库的经历。因为开始在网上查来查去,各种说法都有,一个一个试验,得到的却是各种错误。最后算是阴差阳错,还是人品给力,或是坚持不懈,总算连接成功并获得正确数据。

不知是否为个例,仅供参考。

远程:

Oracle 数据库版本:未知

本地:

Windows 系统:win7,32位

HTTP 服务器:xampp-win32-5.6.15-1-VC11-installer.exe;PHP版本:5.6.15

Oracle Instant Client:12.1.0.2.0

闲言少叙。

HTTP 服务之前一直习惯用 xampp 的免安装版,因为最开始试的时候 PHP 各种报错找不到原因,所以才换了当时最新的安装版,不确定这项是否为必须。这里面带的 PHP 版本为 5.6.15。

官网下载:https://www.apachefriends.org/zh_cn/download.html

Oracle Instant Client 最开始下载的 11.* 的版本,因为网上搜来,别人说的例子都是 11.* 版本。但是测试各种不成功。后来发现 \xampp\php\ext 目录下 PHP 的 oci 拓展是 php_oci8_12c.dll,猜可能是版本不匹配,所以换了当时最新的 12.1.0.2.0。

官网下载:http://www.oracle.com/technetwork/topics/winsoft-085727.html

下面开始说配置过程。

一、修改 php.ini

软件自带的 php.ini 里面关于 oci 的拓展是这三个。

extension=php_oci8.dll

extension=php_oci8_11g.dll

extension=php_pdo_oci.dll

PHP

前两个默认被注释掉了,第三个开着呢。但是前面说了,软件自带的是 php_oci8_12c.dll, php_oci8.dll 和 php_oci8_11g.dll 显然不行(博主试了好久才发现的……这里归功于一款本地文件搜索神器?everything),所以自己添加一行 extension=php_oci8_12c.dll。(博主还尝试了在网上下载php_oci8.dll文件,然后丢到 PHP 拓展的文件夹里,失败……)

二、配置 Win 的环境变量

网上搜索到各种说法,不知道具体哪个完全正确。博主把别人提到的环境变量全部设置了进去,可能其中有部分是不必要的。

1、Path 中添加 Oracle Instant Client 的解压目录。(不要说你想用中文路径名)

2、添加 TNS_ADMIN 变量,值设置为 Oracle Instant Client 的解压目录。

3、添加 LD_LIBRARY_PATH 变量,值设置为 Oracle Instant Client 的解压目录。

4、添加 ORACLE_HOME 变量,值设置为 Oracle Instant Client 的解压目录。

5、添加 SQLPATH 变量,值设置为 Oracle Instant Client 的解压目录。

6、添加 TNS 变量,值设置为 Oracle Instant Client 的解压目录。

三、复制文件到 C:\Windows\System32

把 Oracle Instant Client 目录里的 oci.dll 复制到 Win 系统的 System32 里面。

一直没搞懂为何已经在 Path 中添加了 Oracle Instant Client 的目录,还必须要把文件复制到 System32 里。但是你不放它就会报错!……

四、复制文件到 \xampp\apache\bin

把下面 Oracle Instant Client 目录里这仨货丢到 Apache 的 bin 里面。

oraociei12.dll、orannzsbb12.dll、oci.dll

这一步貌似是必须的。因为博主前面各种测试,不厌其烦,最后做了这一步之后,呵呵,成功了……

整个过程异常艰辛和烦躁,还好最终成功了。前面只是个人经历的记录,不知能否推广,但如若完全按博主写的步骤,想来也必能成功。

其实后面还挺麻烦,博主只知道远程数据库的 ip 地址和服务名,还有用户名及密码,但是不知道数据表名,不知道数据表结构啊……进去一扫,擦,几十个表,表名各种不可读……最后把库里所有的字段名查出来,纯粹靠需要的字段名来猜数据表……