PHP7 的 OCI8 - 未找到模块

OCI8 with PHP7 - module not found

我目前正在设置 Windows 10 Pro x64 机器以与 Apache、PHP 及其 oci8 扩展一起工作。 我之前成功地让 oci8 在 OSX 10.11 和 Windows 2012 Server 上工作,所以我想我知道该怎么做了。但这是 32 位——现在是 64 位。

现在安装的软件是:

我无法正常工作。错误信息是:

Warning: PHP Startup: Unable to load dynamic library 'ext\php_oci8_12c.dll' - Das angegebene Modul wurde nicht gefunden. (Module not found.)

in Unknown on line 0

Extension 'oci8' not present.

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

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

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

Warning: PHP Startup: Unable to load dynamic library 'ext\php_oci8_12c.dll' - %1 ist keine zulässige Win32-Anwendung. (%1 is not a valid Win32 program.)

in Unknown on line 0

Extension 'oci8' not present.

知道这一切有什么问题吗?

谢谢!

总而言之,

One more thing... NTS assumes that PHP does not run as Apache module, is that correct? Are you using FastCGI? – Álvaro González

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

  • PHP 来自 windows.php.net/download/
  • 的 7.0.3 VC14 x64 线程安全
  • 来自 apachehaus 的 Apache 2.4.18 x64。com/cgi-bin/download.plx
  • 来自 oracle 的 Oracle Instant Client 12.1.0.2.0 x64。com/technetwork/topics/winx64soft-089540.html
  • (从 pecl.php.net/package/oci8 获取当前的线程安全 oci8 DLL,但 PHP 附带了它的一个版本 - 对我来说两者都适用)

安装 PHP 作为 Apache 模块。解压缩 Instant Client 并将其移动到您想要的位置。将此位置添加到您的 PATH 系统变量。重新启动您的机器,它应该会出现在您的 phpinfo() 中的 'PATH' 下。

然后我不得不让 PHP extension_dir 成为绝对路径。所以没有 'ext',而是 'C:/Program Files/php-7.0.3/ext'。只有 'ext' 设置为 extension_dir 我可以通过 'php.exe filename.php' 连接到远程 Oracle 数据库。但是 Apache 会在 error.log 中向我抛出一个错误,它找不到 DLL。

如果您选择保留 PHP 附带的 oci DLL,则无需复制 DLL。没有比 PATH 更多的环境变量必须是 changed/created.

至少在我的情况下:-)