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

时间:2016-08-01 22:22:11

标签: php oracle windows-7 php-5.6

多次询问此主题,但每台解决方案都无法在我的计算机上运行。

我正在尝试使用10G oracle dabatase连接Windows 7,但未加载oci扩展名。这里有一些事实:

C:\php>php -m

  

PHP警告:PHP启动:无法加载动态库' C:\ php \ ext \ php_oci8_11g.dll' - %1不是有效的Win32应用程序。

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
  • 64x架构
  • TS VC11

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

故障排除

  • 我正在使用oci8 2.0.11。将它们放在ext/折叠的地方。其余的extesions装得很好。
  • PATH变量包含ORACLE_HOME和php路径
  • 只是查找了所需的oracle dll文件,它们就在那里:

    C:\>where oci*

    C:\oracle\product\10.2.0\db_2\BIN\oci.dll
    C:\oracle\product\10.2.0\db_2\BIN\ocijdbc10.dll
    C:\oracle\product\10.2.0\db_2\BIN\ociw32.dll
    
  • 我不需要Oracle客户端,因为数据库安装在同一台机器上,并且它安装了所有必需的库

我还缺少什么?提前谢谢

2 个答案:

答案 0 :(得分:3)

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

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

下载Oracle Instant Client时请密切注意:

  • 无论您的服务器是x64还是x86 arquitecture,都必须下载32位
  • 正如您所知,PHP是在VC11中编译的,因此您必须使用VC11源下载OIC,这可以确认解压缩下载的文件并检查文件夹vc11是否存在。

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

答案 1 :(得分:0)

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

  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)线程安全版本或PHP(NTS)非线程安全版本。为此,请使用以下代码:

<?php phpinfo(); ?>

Screenshot of phpinfo for TS version

Screenshot of phpinfo for NTS version

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

如果在Zend Extension Build的值中找到NTS,则说明您使用的是非线程安全(NTS)版本的PHP。

  1. 下载最新版本的PHP OCI8扩展DLL。为此,请转到https://pecl.php.net/package/oci8并单击DLL列中与您所需的DLL版本相对应的Windows图标的Downloads链接。

对于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开头,请检查是否仅启用了一行。禁用行以分号开头。如果找到多行,请删除或注释(在行的开头添加分号)。