php: 加载 oracle 驱动程序给出错误“无法加载动态库 - 找不到指定的过程。”

Posted

技术标签:

【中文标题】php: 加载 oracle 驱动程序给出错误“无法加载动态库 - 找不到指定的过程。”【英文标题】:php: loading oracle driver gives error "Unable to load dynamic library - The specified procedure could not be found." 【发布时间】:2015-08-27 02:49:50 【问题描述】:

我似乎对 php 有一个奇怪的问题。

我已将一堆软件从一台服务器迁移到另一台服务器。在服务器上,一些脚本与 Oracle 建立连接,因此为了能够建立连接,安装了 oracle 客户端并准备了 tnsnames 文件。来自 sql*plus 的连接有效。

一些脚本使用 PDO,因此我在 php.ini 中启用了 extension=php_pdo_oci.dll。这些脚本就像一个魅力。

其他一些脚本使用像 oci_connect 这样的函数,这些需要像 php_oci8.dll 这样的扩展。使用 xammp(我用作 apache/php/mysql 包)提供 php_oci8_12c.dll,所以我认为扩展就足够了。

启动服务器时,我在 php 错误日志中看到这些错误:

Unable to load dynamic library 'C:\xampp\php\ext\php_oci8_12c.dll' - The specified procedure could not be found.

该文件位于 C:\xampp\php\ext\,所以这应该不是问题。拾取同一目录中的其他扩展名没有任何问题。我也尝试加载 php_oci8.dll,这是我从旧服务器上获取的,但遇到了完全相同的问题。

我发现了一些我尝试过但没有成功的类似问题的答案: - 将 dll 复制到 c:\windows\system - 将 php ext 目录添加到系统 PATH 变量中 - 将 oracle 客户端添加到系统 PATH 变量中(已经在其中)

我正在使用的软件版本:

操作系统:Windows 2012 R2 x64 PHP:5.6.3 Oracle 数据库:11.2.0.4.0

有什么想法吗?

【问题讨论】:

【参考方案1】:

似乎我想通了,可以回答我自己的问题。看起来 XAMPP 的发行版提供了一个不合适的 ddl。 正确和最新的 oci8 dll 可在此处以所有可能的形式下载:http://windows.php.net/downloads/pecl/releases/oci8/2.0.8/。一旦我找到了正确的,它就像一个魅力。

【讨论】:

没错,XAMPP 3.2.2(带有 php 5.6.21)带有错误版本的 OCI8。我已经关注了你的链接,现在它正在工作!谢谢你。我已经下载了 php_oci8-2.0.8-5.6-ts-vc11-x86.zip @BigPino 我对 xampp 和 oracle 有同样的问题,当我启动 apache 时,我收到此错误(在动态链接库 C:\xampp\ 中找不到 OCISessionGet 过程的入口点php\ext\php_oci8_12c.dll ) 然后我检查了错误日志:无法加载动态库 'C:\xampp\php\ext\php_oci8_12c.dll' - 找不到指定的过程。你把 oci8 dll 放在哪里了?? XAMPP 带有 PHP 编译的 ThreadSafe,所以你必须下载这个文件:windows.php.net/downloads/pecl/releases/oci8/2.0.8/… 在将 3 个 dll 粘贴到这里之前:C:\xampp\php\ext\,重命名为 .old 确保您已根据您在文件 php.ini 中的 Oracle 数据库版本启用了良好的 DLL。最后,重启Apache @Leoh,请参阅上面的答案。忘记给你链接了! @BigPino 同样的问题,我检查了日志并得到了这个: PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\xampp\\php\\ext\\php_oci8_11g.dll'找不到模块 m\xef\xbf\xbddulo【参考方案2】:

XAMPP自带PHP编译ThreadSafe,所以你必须从这个目录下载文件:

http://windows.php.net/downloads/pecl/releases/oci8/2.0.8/……

在将 3 个 DLL 粘贴到 C:\xampp\php\ext* 之前,将“.old*”附加到每个文件。确保您在 php.ini 文件中根据您的 Oracle 数据库版本启用了正确的 DLL。最后,重启 Apache。

【讨论】:

以上是关于php: 加载 oracle 驱动程序给出错误“无法加载动态库 - 找不到指定的过程。”的主要内容,如果未能解决你的问题,请参考以下文章

就是关于oracle的 无监听程序的错误 监听已经开了

CentOS 8 Nginx 与 PHP 7.4.8,PHP 未执行并给出内部服务器错误

PHP中引入文件的方式和他们之间的区别

PLsql登录oracle数据 报 “ora-12541:TNS:无监听程序”错误

我升级到 Android Studio 2.3.3,一个旧的、无错误的程序现在给出错误:“片段应该是静态的......”

oci_parse 在使用 php 变量时给出错误