Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Ubuntu服务器17.04 PHP7和apache2加载oci8.so时出错_Php_Oracle_Php 7_Ubuntu Server_Oracle Call Interface - Fatal编程技术网

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

使用Ubuntu服务器17.04 PHP7和apache2加载oci8.so时出错,php,oracle,php-7,ubuntu-server,oracle-call-interface,Php,Oracle,Php 7,Ubuntu Server,Oracle Call Interface,我已经在Ubuntu服务器17.04中完成了下载Oracle即时客户端、SDK等的整个过程。然后使用alien将rpm包转换为deb,安装、设置路径、下载pecl oci8、编译和安装(没有错误)等,然后添加行: extension=/usr/lib/php/20151012/oci8.so 然后重新启动。当我检查/var/log/apache2/error.log时,我看到: PHP Warning: PHP Startup: Unable to load dynamic library '

我已经在Ubuntu服务器17.04中完成了下载Oracle即时客户端、SDK等的整个过程。然后使用alien将rpm包转换为deb,安装、设置路径、下载pecl oci8、编译和安装(没有错误)等,然后添加行:

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/envars中

export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib
export ORACLE_HOME=/usr/lib/oracle/12.2/client64
因此,我在/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.d/oracle.conf,其中包含以下内容:

/usr/lib/oracle/12.2/client64/lib
然后跑

sudo ldconfig

通过这种方式,它适用于apache和php cli,如果您收到相同的消息,但其命令行版本是:
export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib
export ORACLE_HOME=/usr/lib/oracle/12.2/client64
PHP警告:PHP启动:无法加载动态库'/usr/lib/PHP/20170718/oci8'
当使用PHP cli(=命令行,而不是PHP作为apache模块)时,只需在
/etc/environment
内部设置
LD\u library\u路径(而不是ORACLE\u HOME>),如下所示:

export-LD\u-LIBRARY\u-PATH=/opt/oracle/instantclient\u 12\u 2

下次打开shell时,环境将声明此变量

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

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

FYI我已经在etc/php/7.0/cli/php.ini中添加了扩展=/usr/lib/php/20151012/oci8.so,然后使用php--ri oci8,一切都很好。我甚至可以从命令行运行.php连接测试,效果非常好。LD_LIBRARY_PATH的导出显然是我所缺少的。这样,问题就消失了。谢谢+1这应该标记为答案。由于某些原因,在16.04不需要此步骤。