How to install OCI8 on Ubuntu 18.04 and PHP 7.2
Source: http://www.syahzul.com/2016/04/06/how-to-install-oci8-on-ubuntu-14-04-and-php-5-6/
Install Oracle Instant Client and SDK
Step 1
Download the Oracle Instant Client and SDK from Oracle website. (Need to login in Oracle page)
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
Files: instantclient-basic-linux.x64-12.2.0.1.0.zip
and instantclient-sdk-linux.x64-12.2.0.1.0.zip
.
Step 2
Create a new folder to store Oracle Instant Client zip files on your server.
Upload the Instant Clients files inside this folder.
mkdir /opt/oracle
Step 3
Now we need to extract the files.
cd /opt/oracle
unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip
Step 4
Next, we need to create a symlink to Instant Client files.
ln -s /opt/oracle/instantclient_12_2/libclntsh.so.12.1 /opt/oracle/instantclient_12_2/libclntsh.so
ln -s /opt/oracle/instantclient_12_2/libocci.so.12.1 /opt/oracle/instantclient_12_2/libocci.so
Step 5
Add the folder to our ldconfig
.
echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient
Step 6
Update the Dynamic Linker Run-Time Bindings
ldconfig
Done. Now we can proceed to the next part.
Install Additional Packages
To install the OCI8 extension, we need to install some additional package on our server.
Step 1
Run these command:
apt-get install php-dev php-pear build-essential libaio1
Step 2
Once installed, we need to get the OCI8 file. But, before that we need to update PECL channel.
pecl channel-update pecl.php.net
Then.
pecl install oci8
When you are prompted for the Instant Client location, enter the following:
instantclient,/opt/oracle/instantclient_12_2
Step 3
We need to tell PHP to load the OCI8 extension.
echo "extension =oci8.so" >> /etc/php/7.2/fpm/php.ini
echo "extension =oci8.so" >> /etc/php/7.2/cli/php.ini
echo "extension =oci8.so" >> /etc/php/7.2/apache2/php.ini
We also need to add on apache those environment variables.
echo "export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2" >> /etc/apache2/envvars
echo "export ORACLE_HOME=/opt/oracle/instantclient_12_2" >> /etc/apache2/envvars
echo "LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH" >> /etc/environment
Step 4
Refresh the server. If you are accessing through SSH, then
exit
or
sudo shutdown -r now
Check if the extension is enabled.
php -m | grep 'oci8'
If returns oci8
, its works!
Step 5
Restart the PHP-FPM
service php7.2-fpm restart
Now you can connect to Oracle DBMS from your PHP applications.
Thanks for the rundown. Works except for one step point.
After following all the steps,
php -m
gave the following warning:PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/20170718/oci8.so' (tried: /usr/lib/php/20170718/oci8.so (libmql1.so: cannot open shared object file: No such file or directory), /usr/lib/php/20170718//usr/lib/php/20170718/oci8.so.so (/usr/lib/php/20170718//usr/lib/php/20170718/oci8.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Which means that
libmql1.so
could not be found. The solution:Rename the file
/etc/ld.so.conf.d/oracle-instantclient
to/etc/ld.so.conf.d/oracle-instantclient.conf
. I noticed that/etc/ld.so.conf
loads files looking like/etc/ld.so.conf.d/*.conf
, thus the rename.Check that your system can find/resolve all the shared libraries with:
ldd /usr/lib/php/20170718/oci8.so