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

php_oci8_11g.dll不是有效的Win32应用程序,php,oracle,windows-7,php-5.6,Php,Oracle,Windows 7,Php 5.6,这个话题已经被问了好几次了,但是我的机器上并没有任何解决方案 我正在尝试将windows 7与10G oracle dabatase连接,但未加载oci扩展。以下是一些事实: C:\php>php-m PHP警告:PHP启动:无法加载动态库“C:\PHP\ext\PHP\u oci8\u 11g.dll”-%1不是有效的Win32应用程序 C:\php>php-v PHP 5.6.19 (cli) (built: Mar 2 2016 20:09:42) Copyright (c) 1997-

这个话题已经被问了好几次了,但是我的机器上并没有任何解决方案

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

C:\php>php-m

PHP警告:PHP启动:无法加载动态库“C:\PHP\ext\PHP\u oci8\u 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:\>tnspinglocaldb

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

  • 我正在使用。将它们放入
    ext/
    折叠中。其余的extension加载得非常好
  • PATH变量包含ORACLE_HOME和php路径
  • 刚刚查找了所需的oracle dll文件,它们位于:

    C:\>其中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客户端在我这边不是必需的,因为数据库安装在同一台计算机上,并且它安装了所有必需的库

我还缺什么?提前谢谢你

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

  • 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

  • 首先,您需要了解是否使用PHPX86或x64。最简单的方法是使用以下代码:
  • 如果在
    Zend Extension Build
    的值中找到
    TS
    ,则使用线程安全(TS)版本的PHP

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

  • 下载PHP OCI8扩展DLL的最新版本。要执行此操作,请转到并单击与所需DLL版本对应的
    下载
    列中的Windows图标的
    DLL
    链接
  • 对于PHP版本5.3、5.4、5.5和5.6,最新版本是
    2.0.12

    对于PHP7.0,它的版本是
    2.1.8

    对于PHP7.1、7.2、7.3,其版本为
    2.2.0

    然后,继续下载与您的PHP版本和体系结构对应的归档文件:如果您使用PHP7.2 x86 TS,请下载相应的文件:
    7.2线程安全(TS)x86

  • 在PHP安装的
    ext
    文件夹中解压缩下载的文件。用新文件替换旧文件

  • 在PHP.ini文件中启用PHP OCI8扩展名

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

    ext=php\u oci8\u 11g.dll

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

    ext=php\u oci8\u 12c.dll


    注意:同时只能启用3个可用PCP OCI8扩展中的一个。如果有多行以
    ext=php\u oci8
    开头,请检查是否只启用了一行。禁用的行以分号开头。如果发现多行,请删除或注释该行(在该行开头添加分号)。

    您声明PHP为x64,但您的Oracle安装是什么?“比特数”需要匹配。遇到类似问题,但即使遵循您的解决方案,仍会收到相同的错误消息。但我使用的是Windows10,如果你的PHP是NTS(非线程安全),你也必须使用OCI8NTS。同样适用于TS。使用
    php-v
    来显示此信息。回答。这对我帮助很大。非常感谢。
    <?php echo PHP_INT_SIZE; ?>
    
    <?php phpinfo(); ?>