我刚刚在我的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"
答案 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)