Since the update of PHP 7.1 to PHP 7.2 I can't install oci8. I have this error:
root@3ab6027c8d95:/var/www# php -v
PHP Warning: PHP Startup: Unable to load dynamic library 'oci8.so' (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so (libmql1.so: cannot open shared object file: No such file or directory), /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so (/usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.2.0 (cli) (built: Dec 12 2017 05:52:58) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.2.0, Copyright (c) 1999-2017, by Zend Technologies
I'm using Docker environment, I created a github repo for this, it works if I use the version 7.1 of PHP (shenron/docker-php-fpm:7.2).
I don't understand why the script try to launch this file: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so
.
To my point of view there are two possibilities; or the driver is not compatible, or pecl can't today install oci8.
Has anyone the same problem ?
Thank you for your help.
/usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so.so
is only the second guess on the shared library file name. You can safely ignore that.
The actual problem is: (tried: /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so (libmql1.so: cannot open shared object file: No such file or directory)
oci8.so
itself depends on multiple shared libraries, you can use ldd
to find out which ones:
ldd /usr/local/lib/php/extensions/no-debug-non-zts-20170718/oci8.so
linux-vdso.so.1 (0x00007ffc8bfe7000)
libclntsh.so.12.1 => /usr/local/instantclient/libclntsh.so.12.1 (0x00007fb9919e0000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb991641000)
libmql1.so => not found
libipc1.so => not found
libnnz12.so => not found
libons.so => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb99143d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb991139000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fb990f1c000)
libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007fb990d04000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fb990afc000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb994bc8000)
libaio.so.1 => /lib/x86_64-linux-gnu/libaio.so.1 (0x00007fb9908fa000)
libclntshcore.so.12.1 => not found
Those .so
files seem to be part of a zip file in your repository.
Running PHP like this LD_LIBRARY_PATH=/usr/local/instantclient_12_1/ php
works fine inside your container. You need to move those so files to a sane location.
For anyone stumbling upon this question, here is the proper way to handle it in linux. (I am using CentOS commands for the demo below but Ubnutu shouldn't be any different)
step 1: get oracle libs
EDIT: Thanks to Christopher Jones for the comment, you can find the direct rpm links at https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/
wget oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm
wget oracle-instantclient18.3-devel-18.3.0.0.0-1.x86_64.rpm
step 2: install
yum install oracle-instantclient18.3-basic-18.3.0.0.0-1.x86_64.rpm
yum install oracle-instantclient18.3-devel-18.3.0.0.0-1.x86_64.rpm
step 3: configure (make the path of the oracle libs to be discoverable)
sudo sh -c "echo /usr/lib/oracle/18.3/client64/lib > /etc/ld.so.conf.d/oracle.conf"
sudo ldconfig
test
php -v
# and you should get something like
PHP 7.2.12 (cli) (built: Nov 6 2018 16:40:25)...