启动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
线程安全已启用
我可能做错了什么,我该如何解决?
答案 0 :(得分:1)
您的错误显示内置类型不匹配。
按照以下步骤解决问题:
请务必在http://www.oracle.com/technetwork/topics/winsoft-085727.html下载并安装oracle instantclient ,但请注意:
之后,请将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,问题应该解决。