解决无法加载php_oci8.dll的问题

环境:PHP5.2.13+Apache2.2.15+Oracle9i(本机安的仅仅是客户端,服务器在其他机器上) 问题描述: PHP和Apache已经配置好,使用MySQL数据库的时候一切完好。Oracle9i客户端也OK,可以与远程数据库服务器正常连接,起初安装的是简化版客户端,因为遇到php_oci8.dll无法加载的问题,后来又安装的完整版,此处由完整版的为准。 php.ini中extension_dir = "D:/PHP5/ext",extension=php_oci8.dll(php_mysql.dll和php_mysqli.dll已经开启了,没有问题,现在只是又增加开启了一个php_oci8.dll)。 启动apache error.log文件中显示警告信息: PHP Warning: PHP Startup: Unable to load dynamic library 'D:/PHP5/ext\\php_oci8.dll' - \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\xa3\r\n in Unknown on line 0 查看php安装目录下面的ext文件夹,下面有php_oci8.dll。 求助于百度、谷歌,有的说 1.把php_oci8.dll复制到system32目录下,经试验,无效。 2.添加php安装路径到环境变量path中,使用phpinfo()查看,重启电脑后才会变成新的path设置,但可惜,经过一番折腾,依旧无效。 3.oarcle客户端精简版问题,我换成使用与服务器端安装时使用的同一张盘安装的客户端,经查,无效。 后来,终于在网眼天下的博客中找到了答案,详情请点击这里进入连接,这里面说的很详细,以防连接失效,我简短的说一下解决方法。 问题根子在于 PHP5.0 以后的版本中的 php_oci8.dll 扩展在 Windows 下只支持10g以后的 Oracle 版本 所以,即便在 PHP5.0 的 php.ini 配置文件里打开了 php_oci8.dll 扩展,但还是无法加载 oci8 的数据库驱动,标志就是在 phpinfo() 函数的输出里看不到 OCI8 的配置信息。 解决方法: 1.连接Oracle9i数据库,使用InstantClient11_x版本是不可以的,需要用InstantClient10_x版本。之所以出现“ORA-03134”号错误,很可能就是使用了InstantClient11_x版本导致的。所以目前只有InstantClient10_x版本支持9i/10g/11g数据库。只要选择InstantClient10_x,连接Oracle9i数据库的方法,与《http://blog.why100000.com/?p=581》文章中介绍的就完全一样了。 2.如果 Oracle 数据库服务器与 Apache+PHP 服务器不是同一台机器,则在 Web 服务器上用 Oracle 安装光盘安装 Oracle9i 的客户端软件(注意不是“即时客户端”软件包),比如路径是 D:\oracle\ora92。然后下载Oracle的“即时客户端”软件包(instantclient-basic-win32,前述文章介绍过),应该还是版本 instantclient_10_x,比如版本10_2,解压缩后拷贝以下三个文件到 D:\oracle\ora92\bin 下:     oraociei10.dll     orannzsbb10.dll     oci.dll     这三个文件的总大小大约为 89 MB。注意名字为“oci.dll”的文件在 D:\oracle\ora92\bin 下原来是存在的,复制前做个备份,也避免了复制时不允许覆盖的情况。这样做就是用 Oracle 目前的客户端软件包“升级”Oracle9i版本原来的包。不过这样做似乎不是官方文档所记载的,所以这样做会不会引起什么别的问题,就不得而知了。所以,建议在真正的生产环境下,最好别这样做,还是选用比较新的 Oracle10g/11g 数据库吧。 我选择的解决方法是第二种,下载的是instantclient-basic-win32-10.2.0.4.zip,点击连接可以打开Oracle官方的下载页。 测试程序啥的我就不写了,自己弄吧,到此为止,OK了。
posted @ 2010-06-10 15:45  SillyCoder  阅读(1725)  评论(0编辑  收藏  举报