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


How to use oracle client 11.2 with php (xampp) on win7 x64

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

当我尝试连接到预言机数据库时,PHP 失败并显示 Fatal error: Call to undefined function oci_connect() in .我记得我必须在我的php中启用"oci8扩展".ini几年前我在x32 winXP PC上做了同样的事情。但是我当前的 xampp 在 php/ext 文件夹中没有这些 dll(只有一个php_oci8_12c.dll它在 apache start 上抛出几个未知函数的错误,并且适用于 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 问题表明,在普通客户端中使用评论扩展将不起作用(我也尝试过)。

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

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

那么,如何在不安装 win32 Oracle Instant Client 并破坏当前设置的情况下,使 PHP oracle 库能够在 x64 win7 上使用 oci8 for XAMPP?

编辑:我还尝试了PHP:安装手册(帖子:gmail dot com上的samantha dot vincent)中描述的步骤,包括更改我的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"

我终于找到了一个解决方案:

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

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

我还在我的 http.conf of apache 中添加了以下行

SetEnv ORACLE_BASE "C:/oracle/"
SetEnv ORACLE_HOME "C:/oracle/product/11.2.0/client_1"  

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

  1. https://pecl.php.net/package/oci8/2.2.0/windows 选择 -> 7.3 线程安全 (TS) x86(用于 32 位)或 7.3 线程安全 (TS) x64(用于 64 位)
  2. 提取所有文件并复制到 de C:''xampp''php''ext
  3. 打开 php.ini 文件并写下这个:extension=php_oci8.dll
  4. 重新启动 xampp。 检查您的浏览器 http://localhost/dashboard/phpinfo.php 是否启用了 OCI8(如果未出现)。 从互联网下载并将 OCI8.dll 复制到 C:''Windows''System32 文件夹中。
  5. 重新启动 xampp
  6. 检查您的浏览器 http://localhost/dashboard/phpinfo.php 是否启用了 oci8。做!!