php_oci8_11g.dll 不是有效的 Win32 应用程序

php_oci8_11g.dll is not a valid Win32 application

这个话题已经被问过好几次了,但是每个解决方案都不适用于我的机器。

我正在尝试将 windows 7 与 10G 的 oracle dabatase 连接,但未加载 oci 扩展。这里有一些事实:

C:\php>php -m

PHP Warning: PHP Startup: Unable to load dynamic library 'C:\php\ext\php_oci8_11g.dll' - %1 is not a valid Win32 application.

C:\php>php -v

PHP 5.6.19 (cli) (built: Mar  2 2016 20:09:42)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

C:\>tnsping localdb

TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 02-AUG-2
016 22:37:50

疑难解答

我还缺少什么?提前谢谢你

几个月后我找到了解决方案。考虑以下基础设施:

  • Windows Server 2012 R2 标准版 x64
  • Apache/2.4.18 (Win64) VC11
  • PHP 5.6.19 x86 VC11 TS

下载 Oracle Instant Client 时要特别注意:

  • 无论您的服务器是 x64 还是 x86 架构,您都必须下载 32 位
  • 如您所见,PHP 是在 VC11 中编译的,因此您必须 使用 VC11 源下载 OIC,这可以通过解压缩下载的文件并检查是否文件夹 vc11 在那里。

两个细节都很重要。一旦我满足这两个要求,错误就消失了,我现在可以通过 PHP 成功连接到 Oracle

这是一个可行的解决方案:

  1. 首先,您需要确定您使用的是 PHP x86 还是 x64。最简单的方法是使用以下代码:
<?php echo PHP_INT_SIZE; ?>

如果你得到 4,这意味着你使用 PHP x86。 如果你得到 8,这意味着你使用 PHP x64.

  1. 然后,您需要下载与您的PHP 体系结构匹配的Oracle 版本:例如,如果您使用PHP x86,则下载x86 版本的Oracle。 不能混合版本。

版本 11G:

版本 12C:

https://www.oracle.com/technetwork/database/enterprise-edition/downloads/oracle12c-windows-3633015.html 下载 Oracle Database 12c Release 2 Client (12.2.0.1.0) for Microsoft Windows (x64)Oracle Database 12c Release 2 Client (12.2.0.1.0) for Microsoft Windows (32-bit)

  1. 安装 Oracle

  2. 看看你用的是PHP(TS)Threadsafe版还是PHP(NTS)Non-Threadsafe版。为此,请使用代码:

<?php phpinfo(); ?>

Screenshot of phpinfo for TS version

Screenshot of phpinfo for NTS version

如果在 Zend Extension Build 的值中找到 TS,则使用 PHP 的 Threadsafe (TS) 版本。

如果在 Zend Extension Build 的值中找到 NTS,则使用 Non-Threadsafe (NTS) 版本的 PHP。

  1. 下载最新版本的 PHP OCI8 扩展 DLL。为此,请转至 https://pecl.php.net/package/oci8 并单击 Downloads 列中带有 Windows 图标的 DLL link,对应于您需要的 DLL 版本。

对于PHP版本5.3、5.4、5.5和5.6,最新版本是2.0.12

对于PHP 7.0,版本是2.1.8

对于PHP 7.1、7.2、7.3,版本为2.2.0

然后,继续下载与您的 PHP 版本和体系结构相对应的存档:如果您使用 PHP 7.2 x86 TS,请下载相应的文件:7.2 Thread Safe (TS) x86

  1. 将下载的文件解压缩到 PHP 安装的 ext 文件夹中。用新文件替换旧文件。

  2. 在您的 php.ini 文件中启用 PHP OCI8 扩展。

如果您安装了 Oracle 11g,则需要将以下行添加到您的 php.ini 文件中:

ext=php_oci8_11g.dll

如果您安装了 Oracle 12c,则需要将以下行添加到您的 php.ini 文件中:

ext=php_oci8_12c.dll

注意: 只能同时启用 3 个可用的 PCP OCI8 扩展中的一个。如果有多行以 ext=php_oci8 开头,请检查是否只启用了一行。禁用行以 semi-colon 开头。如果您发现不止一行,请删除或注释(在该行的开头添加 semi-colon)该行。