带有PHP7的OCI8 - 未找到模块

时间:2016-02-29 12:58:59

标签: php windows oci8

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

现在安装的软件是:

  • Apache 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'不存在。

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

我在Stackoverflow和其他网站上阅读过很多关于类似问题的帖子,我尝试过的事情:

  • 将所有DLL移至C:\ Windows \ system32
  • 在PATH变量
  • 中包含PHP扩展名dir
  • 重新检查每个组件是否为64位
  • 创建了ORACLE_HOME和ORACLE_BASE变量(这不是必需的)

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

  

警告:PHP启动:无法加载动态库'ext \ php_oci8_12c.dll' - %1 istkeinezulässigeWin32-Anwendung。 (%1不是有效的Win32程序。)

     

在第0行的未知中

     

扩展'oci8'不存在。

任何想法都有什么问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

总结一下,

  

还有一件事...... NTS假设PHP不作为Apache模块运行,   那是对的吗?你在使用FastCGI吗? - ÁlvaroGonzález

是要走的路。如果有人遇到麻烦,以下是我采取的确切步骤:

  • PHP 7.0.3 VC14 x64来自windows.php.net/download /
  • 的线程安全
  • 来自apachehaus.com/cgi-bin/download.plx的Apache 2.4.18 x64
  • 来自oracle.com/technetwork/topics/winx64soft-089540.html的Oracle Instant Client 12.1.0.2.0 x64
  • (从pecl.php.net/package/oci8获取当前的Thread Safe 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 DB。但Apache会在error.log中给我一个错误,它无法找到DLL。

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

至少在我的情况下: - )