无法加载动态库' C:\ xampp \ php \ ext \ php_oci8.dll' - %1不是有效的Win32应用程序

时间:2015-10-19 17:51:31

标签: php oracle xampp

启动xampp服务器时出现此错误。

  

C:\ XAMPP \ PHP \分机\ php_oci8.dll' - %1不是有效的Win32应用程序。

我已下载php_oci8-2.0.8-5.6-ts-vc11-x86并将php_oci8.dll解压缩到C:\xampp\php\ext目录。

另外,我下载了instantclient-basic-nt-12.1.0.2.0(32位版本)并将其添加到Windows的PATH变量中。

C:\OracleBasicClient\instantclient-basic-nt-12.1.0.2.0\instantclient_12_1已添加到PATH

尽管如此,我还是收到了这个错误,并且不知道为什么会这样。

我的窗口是64位。

PHP信息(xampp)

系统 Windows NT 6.1(Windows 7专业版)i586
编译器 MSVC11(Visual C ++ 2012)
架构 x86
线程安全已启用

我可能做错了什么,我该如何解决?

2 个答案:

答案 0 :(得分:1)

您的错误显示内置类型不匹配。

按照以下步骤解决问题:

请务必在http://www.oracle.com/technetwork/topics/winsoft-085727.html下载并安装oracle instantclient ,但请注意:

  1. 记下您的 Oracle 数据库版本;对于 11g 版本,使用版本12.1.x 用于Oracle数据库 12c 版本11.1.x
  2. 在任何一种情况下,请务必下载Oracle instantclient的 Basic Lite 版本。
  3. 之后,请将Oracle即时客户端的位置添加到环境变量下的系统变量路径中。同样确保您同时拥有 xampp 的PHP和 ext 的PHP,并将其设置在那里(如果没有,请添加它们)。

    然后,继续将 TNS_ADMIN 的新系统变量添加为变量名称,将位置添加到Oracle instantclient 作为变量值

    另外,使用与相同的 Oracle即时客户端的位置来定义用户变量 PATH

    在此阶段之后,重新启动计算机以完全传播新定义的环境变量。

    启用后,您可以打开 Windows命令提示符并运行 where oci * ,以确保您的环境变量定义良好;响应应如下所示:

    C:\Users\flex>where oci*
    
    C:\oraclexe\app\oracle\product\11.2.0\server\bin\oci.dll
    C:\oraclexe\app\oracle\product\11.2.0\server\bin\ocijdbc11.dll
    C:\oraclexe\app\oracle\product\11.2.0\server\bin\ocijdbc11.sym
    C:\oraclexe\app\oracle\product\11.2.0\server\bin\ociw32.dll
    C:\instantclient_11_2\oci.dll
    C:\instantclient_11_2\oci.sym
    C:\instantclient_11_2\ocijdbc11.dll
    C:\instantclient_11_2\ocijdbc11.sym
    C:\instantclient_11_2\ociw32.dll
    C:\instantclient_11_2\ociw32.sym
    

    如果没有,你一定错过了一些东西,需要重新审视这个过程,确保有效地完成它。

    您现在可以继续浏览php.ini文件(提供的环境变量已明确定义),并通过取消注释来启用 oci 扩展(php_oci8.dll和php_oci8_11g.dll);您可以通过在所述扩展名之前删除半列(; )来实现这一目标。

    请记得保存你的php.ini文件,然后重启或启动你的apache,如果它还没有运行。

    要检查您的PHP oci8配置是否已启用,您可以返回Windows命令提示符并运行: php --ri oci8 ;答案应与下面的答案类似:

    C:\Users\flex>php --ri oci8
    
    OCI8 Support => enabled
    OCI8 DTrace Support => disabled
    OCI8 Version => 2.1.1
    Revision => $Id: 86f22a208f89dcd5b305e82929a7429683968b11 $
    Oracle Run-time Client Library Version => 11.2.0.4.0
    Oracle Compile-time Instant Client Version => 10.2
    
    Directive => Local Value => Master Value
    oci8.max_persistent => -1 => -1
    oci8.persistent_timeout => -1 => -1
    oci8.ping_interval => 60 => 60
    oci8.privileged_connect => Off => Off
    oci8.statement_cache_size => 20 => 20
    oci8.default_prefetch => 100 => 100
    oci8.old_oci_close_semantics => Off => Off
    oci8.events => Off => Off
    
    Statistics =>
    Active Persistent Connections => 0
    Active Connections => 0
    

    或者,您可以创建一个以<?php phpinfo(); ?>为内容的PHP文件,然后在浏览器中打开它并搜索oci8次出现;它应该在那里显示启用。

答案 1 :(得分:0)

您似乎下载了不同架构的DLL并在php.ini中指向它,而不是使用捆绑的DLL,只是取消注释php.ini中的默认条目。

我刚刚使用PHP 7.1下载了相同版本的XAMPP 3.2.2 x86,并且附带了所需的DLL文件,该文件已安装到C:\xampp\php\ext\php_oci8_12c.dll

您似乎已正确完成其他所有事情。

要解决此问题,请确保有效php.ini(默认情况下为C:\xampp\php\php.ini)仅引用 默认文件(删除您为{{1}添加的错误条目像这样:

php_oci8.dll

重启Apache,问题应该解决。