使用 Ubuntu 服务器 17.04 php 7 和 apache2 加载 oci8.so 时出错

Error loading oci8.so with Ubuntu server 17.04 php 7 and apache2

我在一台UbuntuServer 17.04上完成了下载Oracle即时客户端、SDK等的全过程。然后用alien将rpm包转为deb,安装,设置路径,下载pecl oci8,编译安装(w/o错误)等,然后添加行:

extension=/usr/lib/php/20151012/oci8.so

并重新启动。当我检查 /var/log/apache2/error.log 时,我看到:

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/oci8.so' - libmql1.so: cannot open shared object file: No such file or directory in Unknown on line 0
[Thu Jul 20 10:46:44.352631 2017] [mpm_prefork:notice] [pid 23450] AH00163: Apache/2.4.25 (Ubuntu) configured -- resuming normal operations
[Thu Jul 20 10:46:44.352717 2017] [core:notice] [pid 23450] AH00094: Command line: '/usr/sbin/apache2'

有谁知道我该怎么做才能让它发挥作用? 我想我没有启用 selinux 或者可能是权限问题?

谢谢

解决方案是将 ORACLE 全局变量不放在 /etc/environment 中,而是放在 /etc/apache2/envvars

所以,我在 /etc/apache2/envvars

的末尾添加了这两行
export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib
export ORACLE_HOME=/usr/lib/oracle/12.2/client64

一切都很好

由于使用上述解决方案,php cli 仍然会遇到同样的问题,因此最好添加一个新文件 /etc/ld.so.conf.[=19= .conf 内容如下:

/usr/lib/oracle/12.2/client64/lib

然后运行

sudo ldconfig

这种方式适用于 apache 和 php cli,您不需要更改 /etc/apache2/envvars

使用 Linux Ubuntu 18,如果您收到相同的消息,但其命令行版本: PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20170718/oci8' 当使用 php cli(= 命令行,相对于 php 作为 apache 模块),你需要做的就是设置 LD_LIBRARY_PATH(不是 ORACLE_HOME),在/etc/environment里面,如下图:

export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2

下次打开shell,环境会声明这个变量。

注意变量值需要指向包含lib*.so文件的文件夹。

验证: 打开一个新的控制台,然后 运行 php -m | grep oci8