在同一服务器上使用带有64位oracle客户端的php 7.3.4 64bit和带有32位oracle客户端的php 7.3.4 32bit

时间:2019-05-24 14:11:04

标签: php windows oracle server oracle12c

我们在Windows Server 2016 Standard上有一个IIS,可通过快速cgi使用php 7.3.4 32bit。
要在另一台服务器上建立与oracle 12cR1数据库的连接,我们使用php_oci8_12c.dll和oracle客户端12.1.0 32bit。

这很棒。现在我们要切换到64位php,但是对于某些旧项目,我们仍然需要32位php和oracle客户端。

因此,我们执行以下操作:
1.卸载oracle客户端
2.在C:\Oracle\product\12.1.0\client_x64中安装oracle客户端12.1.0 64位(安装类型:管理)
3.重新启动服务器
4.配置网络管理器
5.在C:\Oracle\product\12.1.0\client_x86中安装oracle客户端12.1.0 32位(安装类型:管理)
4.重新启动服务器
5.配置网络管理器
6.下载具有64位扩展名的php 7.3.4 64位

现在我们有两个php文件夹:
C:\php7_3_4_x86
C:\php7_3_4_x64

此时,IIS使用C:\ php7_3_4_x86 \ php-cgi.exe和32位oracle客户端,因为它是最新安装的客户端,并且该路径是PATH变量中所有路径中的第一个。

现在,我们想将临时切换到64位。因此,我们尝试执行以下步骤:
1.将IIS处理程序更改为C:\ php7_3_4_x64 \ php-cgi.exe
2.在环境变量PATH中交换oracle客户端路径。现在,它是:C:\Oracle\product\12.1.0\client_x64;C:\Oracle\product\12.1.0\client_x86;[...]
3.重新启动服务器

重启后,我们尝试在浏览器中打开一个php文件,但出现以下错误:
Call to undefined function oci_connect

如果我们将C:\Oracle\product\12.1.0\client_x64\BIN中的oci.dll直接放入C:\php7_3_4_x64中,它将加载文件。因此我们认为它找不到64位客户端。

我们还尝试在C:\ Windows \ system32 / SYSWOW64中创建链接的方法,但这不起作用。同样的错误。

我们该怎么办?我们需要在32和64位php + oracle之间切换的可能性。

1 个答案:

答案 0 :(得分:0)

问题解决了。

一切都正确,但是oracle安装程序忘记了clientx64文件夹的正确窗口。

clientx86上,“已认证用户”组(德语:Authentifizierter Benutzer)具有完全访问权限,而clientx64没有此组。

添加组并授予其对clientx64文件夹的完全访问权限后,它便可以使用。无需切换PATH变量中的条目。 PHP尝试加载第一个元素,失败后将其加载到PATH变量中的第二个元素。

一切正常!