出于安全性考虑,我最近升级了Apache和PHP,我也使用PHP与Oracle数据库进行通信。新的PHP版本只有php_oci8_12c.dll模块,所以我也安装了Oracle 12c客户端。
启用 oci8 模块后,我注意到当我运行 phpinfo() 时该模块没有显示在 Apache 中,但是如果我运行 php -m,我会在那里找到 oci8 模块。进一步检查显示,自升级以来,PATH 环境变量尚未更新,并且新路径仅追加在 PATH 变量的末尾。
我粘贴在 Apache 的(精简的)PATH 数据下面:
C:'oracle'client11gR2_32'bin;C:'www'Apache24'bin;C:'www'php548;C:'database'mysql5528'bin;C:'oracle12c'client12c_32'bin;C:'www'php562;C:'www'php562'ext
与系统 PATH 变量相比:
C:'oracle12c'client12c_32'bin;C:'oracle'client11gR2_32'bin;C:'www'Apache24'bin;C:'www'php562;C:'www'php562'ext;C:'database'mysql5528'bin
我尝试重新启动Apache服务,并卸载/重新安装,但没有一个有效。似乎数据以某种方式被"缓存"在一个单独的位置,但我无法说出在哪里。如果我将 Oracle 客户端重命名为 11g HOME 文件夹,则会检测到 oci8 模块并将其加载到 Apache 中。
我已经在互联网上搜索了"重置"Apache PATH变量,但无济于事,因此我将其发布在这里。请帮忙。
我能想到两个可能的原因:
- 12c 客户端的路径是用户变量,而不是系统变量(但我希望它位于路径列表的末尾)
- 12c 客户端安装程序已直接修改注册表以添加路径,因此系统环境尚未识别更改。(如果您将 Apache 作为服务运行,那么仅仅因为您的帐户可以看到路径更改并不意味着
SYSTEM
帐户可以看到更改。
假设后一种情况,服务器重新启动将解决问题。如果无法重新启动服务器,则可以尝试停止Apache,打开"环境变量"对话框,然后只需按OK
(在此对话框和所有父对话框中)即可"重新初始化"系统环境。 再次启动Apache,它应该会选择新的设置。
在相关说明中:您应该将捆绑的 OCI 驱动程序 (1.4.10) 替换为 PECL 的最新版本(当前为 2.0.8)。 如PECL描述中所述:
使用 PHP 4.3.9 时,请使用较旧的 PHP OCI8 1.4.10 到 PHP 5.1.x,或者只有 Oracle 数据库 9.2 客户端 图书馆可用。
Windows 下载包含 php_oci8.dll
、 php_oci8_11g.dll
和 php_oci8_12c.dll
。 因此,您无需尝试更改 Oracle 客户端安装。