我们在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之间切换的可能性。
答案 0 :(得分:0)
问题解决了。
一切都正确,但是oracle安装程序忘记了clientx64
文件夹的正确窗口。
在clientx86
上,“已认证用户”组(德语:Authentifizierter Benutzer)具有完全访问权限,而clientx64
没有此组。
添加组并授予其对clientx64
文件夹的完全访问权限后,它便可以使用。无需切换PATH变量中的条目。 PHP尝试加载第一个元素,失败后将其加载到PATH变量中的第二个元素。
一切正常!