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
我无法正常工作。错误信息是:
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 和其他网站上阅读了很多关于类似问题的帖子,我已经尝试过:
- 将所有 DLL 移动到 C:\Windows\system32
- 在 PATH 变量中包含 PHP 扩展目录
- 重新检查每个组件都是 64 位的
- 创建了 ORACLE_HOME 和 ORACLE_BASE 变量(这应该不是必需的)
如果我将 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.
至少在我的情况下:-)
我目前正在设置 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
我无法正常工作。错误信息是:
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 和其他网站上阅读了很多关于类似问题的帖子,我已经尝试过:
- 将所有 DLL 移动到 C:\Windows\system32
- 在 PATH 变量中包含 PHP 扩展目录
- 重新检查每个组件都是 64 位的
- 创建了 ORACLE_HOME 和 ORACLE_BASE 变量(这应该不是必需的)
如果我将 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.
至少在我的情况下:-)