Step 1
Download Oracle Instant Client and SDK from Oracle:
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
Download files:
Basic Package (ZIP): instantclient-basic-linux.x64-21.6.0.0.0dbru.zip
SDK Package (ZIP): instantclient-sdk-linux.x64-21.6.0.0.0dbru.zip
Step 2
Create new folders for Oracle Instant Client on server
sudo mkdir /usr/lib/oracle
sudo mkdir /usr/lib/oracle/21.6
sudo mkdir /usr/lib/oracle/21.6/client64
Step 3
Extract files
sudo cp instantclient-basic-linux.x64-21.6.0.0.0dbru.zip /usr/lib/oracle/21.6/client64
sudo cp instantclient-sdk-linux.x64-21.6.0.0.0dbru.zip /usr/lib/oracle/21.6/client64
cd /usr/lib/oracle/21.6/client64
sudo unzip instantclient-basic-linux.x64-21.6.0.0.0dbru.zip
sudo unzip instantclient-sdk-linux.x64-21.6.0.0.0dbru.zip
sudo mv instantclient_21_6 lib
Step 4
Create symbolic link to the new Instant Client files:
cd /usr/lib/oracle/21.6/client64/lib/
sudo ln -s libclntsh.so.21.6 libclntsh.so (It may already exist, continue)
sudo ln -s libocci.so.21.6 libocci.so (It may already exist, continue)
Step 5
Edit/Create this file with the path to the lib (for LDCONFIG):
sudo echo /usr/lib/oracle/21.6/client64/lib > /etc/ld.so.conf.d/oracle.conf
Step 6
Update Dynamic Linker
ldconfig
Step 7
Install php-dev php-pear build-essential and libaio1
php 8
sudo apt-get install php-dev php-pear build-essential libaio1
php7.4-fm
sudo apt-get install php7.4-dev php-pear build-essential libaio1
Step 8
Update PECL to install OCI8 from it
sudo pecl channel-update pecl.php.net
Install OCI8 from PCEL (desired version, default seems not to find it for me, i used php7.)
sudo pecl install oci8 (for php 8)
sudo pecl install oci8-2.2.0 (for php 7.)
During install it will require the path to Instant Client, write this:
instantclient,/usr/lib/oracle/21.6/client64/lib
At the end something like this should appear:
Build process completed successfully
Installing '/usr/lib/php/20190902/oci8.so'
install ok: channel://pecl.php.net/oci8-2.2.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=oci8.so" to php.ini
Step 9
Load OCI8 into PHP
sudo echo "extension=oci8.so" >> /etc/php/7.4/cli/php.ini
Restart Apache
sudo systemctl restart apache2
Step 10
Add to mods-available
cd /etc/php/7.4/mods-available/
sudo nano oci.ini
Add this to the file:
extension = oci8.so
Step 11
Create sym link to the created ini file
cd /etc/php/7.4/apache2/conf.d
sudo ln -s /etc/php/7.4/mods-available/oci.ini 20-oci.ini
jika menunggunakan php-fpm gunakan ini:
cd /etc/php/7.4/fpm/conf.d
sudo ln -s /etc/php/7.4/mods-available/oci.ini fpm-oci.ini
Restart Apache
sudo systemctl restart apache2
Restart php-fpm
sudo systemctl restart php7.4-fpm
Step 12 (Testing)
Check if OCI is loaded in PHP
php -i | grep oci
Should output something like this:
oci8
oci8.connection_class => no value => no value
oci8.default_prefetch => 100 => 100
oci8.events => Off => Off
oci8.max_persistent => -1 => -1
oci8.old_oci_close_semantics => Off => Off
oci8.persistent_timeout => -1 => -1
oci8.ping_interval => 60 => 60
oci8.privileged_connect => Off => Off
oci8.statement_cache_size => 20 => 20
Credits
Based on a post from eSkiSo
https://gist.github.com/eSkiSo/781269c79b4dd740e90fcc059c1985ae