带有 PHP7 的 OCI8 - 未找到模块


OCI8 with PHP7 - module not found

我目前正在设置一台Windows 10 Pro x64机器,以使用Apache,PHP及其oci8扩展。我之前成功地让oci8在OSX 10.11和Windows 2012 Server上运行,所以我想我知道该怎么做。但这是 32 位 – 现在是 64 位。

现在安装的软件是:

  • 阿帕奇 2.4.18 x64
  • PHP 7.0.3 TS x64
  • Oracle Instant Client x64 (instantclient-basic-windows.x64-12.1.0.2.0)
  • oci8 2.1.0 TS x64

我不让它工作。错误消息是:

警告:PHP 启动:无法加载动态库 'ext''php_oci8_12c.dll' - Das angegebene Modul wurde nicht gefunden.(未找到模块。

在 未知 在第 0 行

扩展"oci8"不存在。

我通过将Oracle Instant Client的目录写入PATH变量来安装它,并将php_oci8_12c.dll文件复制到PHP ext dir,并在php.ini中取消注释相应的行。这还不够吗?

我在Stackoverflow和其他网站上阅读了许多关于类似问题的帖子,我已经尝试过:

  • 将所有 DLL 移动到 C:''Windows''system32
  • 在 PATH 变量中包含 PHP 扩展目录
  • 重新检查每个组件是否为64位
  • 创建的ORACLE_HOME和ORACLE_BASE变量(这不应该是必需的)

如果我将 php_oci8_12c.dll x64 更改为 32 位,则会收到不同的错误消息:

警告:PHP Startup: 无法加载动态库 'ext''php_oci8_12c.dll' - %1 ist keine zulässige Win32-Anwendung.(%1 不是有效的 Win32 程序。

在 未知 在第 0 行

扩展"oci8"不存在。

任何想法,这一切都有什么问题?

谢谢!

总而言之,

还有一件事...NTS假设PHP不作为Apache模块运行, 这是对的吗?你正在使用FastCGI吗?– 阿尔瓦罗·冈萨雷斯

是要走的路。如果有人遇到同样的问题,以下是我采取的确切步骤:

  • PHP 7.0.3 VC14 x64 线程安全防 windows.php.net/download/
  • 阿帕奇 2.4.18 x64 从 apachehaus.com/cgi-bin/download.plx
  • Oracle 即时客户端 12.1.0.2.0 x64(来自 oracle.com/technetwork/topics/winx64soft-089540.html
  • (从 pecl.php.net/package/oci8 获取当前的线程安全oci8 DLL,但PHP附带了一个版本 - 为我使用任何一个)

将PHP安装为Apache模块。解压缩即时客户端并将其移动到所需位置。将此位置添加到 PATH 系统变量中。重新启动你的机器,它应该显示在你的phpinfo()的"PATH"下。

然后我必须使PHP extension_dir绝对路径。所以没有"ext",而是"C:/Program Files/php-7.0.3/ext"。只有"ext"设置为extension_dir我可以通过"php.exe文件名.php"连接到远程Oracle DB。但是Apache会错误地抛给我一个错误.log它找不到DLL。

如果您选择保留 PHP 附带的 oci DLL,则不需要 DLL 复制。无需更改/创建比 PATH 更多的环境变量。

至少就我而言:-)