如何在win7 x64上使用带有php(xampp)的oracle客户端11.2

时间:2015-01-05 06:18:41

标签: php oracle apache oracle11g oracleclient

我刚刚在我的win7(x64)PC上安装了一个真实的XAMPP来编写一些PHP脚本来连接到oracle DB。我也安装了一个普通的oracle 11.2.0客户端(正确设置了PATH和ORACLE_HOME)。客户端用于我的所有其他工作,没有任何问题。

当我尝试连接到oracle DB时,PHP失败并显示Fatal error: Call to undefined function oci_connect() in。我记得我必须启用" oci8-extensions"在我的php.ini中,几年前我在x32 winXP PC上做了同样的事情。 但是我当前的xampp在php/ext文件夹中没有这些dll(只有一个php_oci8_12c.dll在apache启动时抛出了几个未知函数的错误,而且是针对oracle 12而不是11)和php.ini还说他们只需要即时客户。

;extension=php_oci8.dll      ; Use with Oracle 10gR2 Instant Client
;extension=php_oci8_11g.dll  ; Use with Oracle 11gR2 Instant Client

SO-questions表明使用普通客户端的评论扩展名不起作用(我也尝试过)。

我试图谷歌寻求解决方案,但所有"解决方案"是"安装win32即时客户端并启用扩展"。但我不能这样做,因为我的大多数QA工作需要安装和配置的11.2.0客户端,而且我的php / ext文件夹中没有.dll

我还尝试将ociw32.dll从client / bin文件夹复制到php / ext-folder,但后来apache说它不是PHP库。

那么如何在x64 win7 没有安装win32 Oracle Instant Client并破坏我当前的设置时,如何启用PHP oracle库来使用oci8 for XAMPP?

编辑:我还尝试了in the PHP: Installation Manual (Post of: samantha dot vincent at gmail dot com)描述的步骤,包括更改我的apache-http.conf,这也没有帮助。

我也对我的phpinfo() - 输出感到困惑,因为它说

Configure Command   "--with-pdo-oci=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared" "--with-oci8-12c=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared"

2 个答案:

答案 0 :(得分:5)

我终于找到了解决方案:

我从"PECL :: PAckage :: oci8 :: 2.0.8"(在我的情况下是32位线程安全DLL)下载了实际的OCI-DLL,然后从此行中删除了;

;extension=php_oci8_11g.dll  ; Use with Oracle 11gR2 Instant Client

我还在apache

的http.conf中添加了以下行
SetEnv ORACLE_BASE "C:/oracle/"
SetEnv ORACLE_HOME "C:/oracle/product/11.2.0/client_1"  

之后我重新启动了apache,确保我的连接别名可能放在我的tsnames.ora中,然后我可以使用oci8函数来解决任何问题。

答案 1 :(得分:1)

  1. https://pecl.php.net/package/oci8/2.2.0/windows选择-> 7.3线程安全(TS)x86(用于32位)或7.3线程安全(TS)x64(用于64位)
  2. 提取所有文件并复制到C:\ xampp \ php \ ext
  3. 打开php.ini文件并编写以下文件:extension = php_oci8.dll
  4. 重新启动xampp。如果未显示oci8,请检查您的浏览器http://localhost/dashboard/phpinfo.php。从Internet下载,然后将oci8.dll复制到c:\ windows \ system32文件夹中。
  5. 重新启动xampp
  6. 检查浏览器http://localhost/dashboard/phpinfo.php是否启用了oci8。完成!