http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
Download files:
Basic Package (ZIP): instantclient-basic-linux.x64-21.1.0.0.0.zip
SDK Package (ZIP): instantclient-sdk-linux.x64-21.1.0.0.0.zip
Create new folders for Oracle Instant Client on server
sudo mkdir /usr/lib/oracle
sudo mkdir /usr/lib/oracle/21.1
sudo mkdir /usr/lib/oracle/21.1/client64
Extract files
sudo cp instantclient-basic-linux.x64-21.1.0.0.0.zip /usr/lib/oracle/21.1/client64
sudo cp instantclient-sdk-linux.x64-21.1.0.0.0.zip /usr/lib/oracle/21.1/client64
cd /usr/lib/oracle/21.1/client64
sudo unzip instantclient-basic-linux.x64-21.1.0.0.0.zip
sudo unzip instantclient-sdk-linux.x64-21.1.0.0.0.zip
sudo mv instantclient_21_1 lib
Create symbolic link to the new Instant Client files:
cd /usr/lib/oracle/21.1/client64/lib/
sudo ln -s libclntsh.so.21.1 libclntsh.so (It may already exist, continue)
sudo ln -s libocci.so.21.1 libocci.so (It may already exist, continue)
Edit/Create this file with the path to the lib (for LDCONFIG):
sudo nano /etc/ld.so.conf.d/oracle.conf
Add this to the file and save:
/usr/lib/oracle/21.1/client64/lib
Update Dynamic Linker
ldconfig
Install php-dev php-pear build-essential and libaio1
sudo apt-get install php-dev php-pear build-essential libaio1
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 (php 8)
sudo pecl install oci8-2.2.0 (php 7.)
During install it will require the path to Instant Client, write this:
instantclient,/usr/lib/oracle/21.1/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
Load OCI8 into PHP
Add to mods-available
cd /etc/php/7.4/mods-available/
sudo nano oci.ini
Add this to the file:
extension = oci8.so
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
Restart Apache
sudo systemctl restart apache2
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
Based on a post from Carlos Juan
https://www.cjorellana.net/2020/12/como-instalar-oci8-en-ubuntu-2004-y-php.html
My problem was having multiple PHP versions installed, it was using the wrong php-dev version.