简体   繁体   中英

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

I have gone through the whole process of downloading Oracle instant client, SDK, etc. in a Ubuntu Server 17.04. Then converted rpm packages to deb with alien, installed, set the paths, downloaded pecl oci8, compiled and installed (w/o errors), etc. and then added the line:

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

And restarted. When I check the /var/log/apache2/error.log I see:

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'

Does any one know what I could do to make it work? I guess I have not selinux enabled or maybe it is a permissions problem?

Thanks

The solution is to put the ORACLE global variables NOT in /etc/environment but in the /etc/apache2/envvars

So, I've added these 2 lines at the end of /etc/apache2/envvars

export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib
export ORACLE_HOME=/usr/lib/oracle/12.2/client64

And all working great

As you still will have the same problem with php cli with the above solution, it would be better to add a new file /etc/ld.so.conf.d/oracle.conf with this content:

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

Then run

sudo ldconfig

This way it works for apache and php cli and you do not need to change /etc/apache2/envvars

With Linux Ubuntu 18, if you're getting the same message, but its command line version: PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20170718/oci8' when using php cli (= command line, as opposed to php as an apache module), all you need to do is to set LD_LIBRARY_PATH (not ORACLE_HOME), inside of /etc/environment , as shown below:

export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2

Next time you open a shell, the environment will declare this variable.

Note that the variable value needs to point to the folder that contains the lib*.so files.

Verification: open a new console, and run php -m | grep oci8 php -m | grep oci8

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM