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

4

在启动xampp服务器时,我遇到了以下错误:

C:\xampp\php\ext\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

然而,我仍然遇到这个错误,不确定为什么会出现这种情况。

我的windows系统是64位。

PHP信息(xampp)

System Windows NT 6.1 (Windows 7 Professional) i586
Compiler MSVC11 (Visual C++ 2012)
Architecture x86
Thread Safety enabled

我到底做错了什么,如何解决问题?

2个回答

1

您的错误显示了一个内建类型不匹配。

按照以下步骤解决:

确保您下载并安装了Oracle instantclient,下载链接为:http://www.oracle.com/technetwork/topics/winsoft-085727.html,但请注意:

  1. 记下您的Oracle数据库版本;对于Oracle数据库12c,使用Version 12.1.x,对于11g版本,使用Version 11.1.x
  2. 在任何情况下,请确保您下载了Oracle instantclient的Basic Lite版本。

之后,请将Oracle instantclient的位置添加到您的环境变量中的系统变量路径中。同样,请确保您的xampp的PHP和其ext也可用并设置在其中(如果没有,请添加它们)。

接着,添加一个新的系统变量,将TNS_ADMIN作为变量名Oracle instantclient的位置作为变量值

同时,定义用户变量PATH,将相同的Oracle instantclient的位置作为

完成这个步骤后,重新启动计算机以全面传播新定义的环境变量。

启动后,您可以打开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
我已经完成了所有步骤,但仍然收到警告并且无法连接Oracle `$ php --ri oci8 PHP警告:PHP启动时无法加载动态库'C:\xampp\php\ext\php_oci8_12c.dll' - 指定的模块找不到。 位于未知行。 - Waqas Mehmood
@WaqasMehmood:请查看您的 C:\xampp\php\ext 目录,并检查名为 php_ oci8_12c.dll 的文件;您能找到它吗?我相信它一定丢失了。是这种情况吗? - nyedidikeke
1
是的,将 php_oci8_12c.dll 文件放置在 c:\xampp\php\ext 文件夹中。 - Waqas Mehmood
@WaqasMehmood:您使用的是哪个版本的instantclient?Windows版本?PHP版本? - nyedidikeke
oracle Instant Client: instantclient-basic-nt-12.2.0.1.0,php 7.1,windows 10,xampp 3.2.2。 - Waqas Mehmood
我遇到了与@WaqasMehmood相同的问题。我的Windows版本是Windows 10 64位,我的PHP版本是5.3.29,我的Oracle InstaClient是instantclient-basic-nt-12.2.0.1.0.zip,32位。路径变量和extension_dir变量都已正确设置。所有其他模块都可以正确加载,唯独这个模块出现了找不到的错误。 - Mark Langer

0

看起来您下载了错误架构的DLL,并在php.ini中指向它,而不是使用捆绑的DLL并取消注释php.ini中的默认条目。

我刚刚下载了相同版本的XAMPP 3.2.2 x86,带有PHP 7.1,它附带了您所需的DLL文件,安装在C:\xampp\php\ext\php_oci8_12c.dll

您似乎已经正确完成了其他所有步骤。

要解决此问题,请确保有效的php.ini(默认情况下为C:\xampp\php\php.ini)仅引用默认文件(删除您添加的有误的php_oci8.dll条目),如下所示:

extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client

重新启动Apache,问题应该得到解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接