The following steps is valid for Oracle 11g, you can modify as per your oracle version in a similar fashion.
1. Install the Oracle Instant Client:
- Download the Oracle Instant Client RPM
packages for your architecture from the Oracle website
(https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html).
You'll need oracle-instantclient-basic
, oracle-instantclient-devel and
oracle-instantclient-sqlplus packages.
- Transfer the downloaded RPM packages to
your CentOS 8 system if you downloaded them on a different machine.
Note:
for centos, it is better
to download “.rpm” file rather than “.zip”
2. Install the Oracle Instant Client RPM packages:
Go to the
directory where you downloaded the oracle instant-client files and install
those files:
Let’s take
example for version oracle instant-client 11.2,
sudo
dnf install oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
sudo
dnf install oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64
sudo
dnf install oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64
To verify
whether the Oracle Instant Client "devel" package is installed on
your CentOS system, you can use the package management tool rpm or dnf.
Here's how you can check for the presence of the Oracle Instant Client devel
package:
Using
‘rpm’:
rpm -qa |
grep oracle-instantclient-devel
Using
‘dnf’:
dnf list
installed | grep oracle-instantclient-devel
3. Verify the ORACLE_HOME environment variable:
echo
$ORACLE_HOME
Ensure that
the ORACLE_HOME environment variable is set correctly and points to the
location where you installed the Oracle Instant Client. If it's not set
correctly, you can set it as follows:
export
ORACLE_HOME=/path/to/instant/client
During the
installation process, you may be prompted to provide the path to the Oracle
Instant Client library. If prompted, enter the correct path:
Enter the
path: instantclient,/usr/lib/oracle/19.20/client64/lib
4. Set the environment variables required for OCI8 and PHP:
$ export ORACLE_HOME=/usr/lib/oracle/11.2/client64
$ export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
sudo
ldconfig
Once you are
done with above steps, the environment is set for oci8 installation, follow the
bellows steps now,
5. Stop Apache and uninstall older version of OCI8 if any
(stopping Apache is very important):
service httpd stop
pecl uninstall oci8
6. Install php-pear and php devel:
sudo yum install php-pear php-devel
pear download pecl/oci8
7. The next commands depend on the version of oci8 downloaded
above.
$ tar
xvzf oci8-2.2.0.tgz
$ cd
oci8-2.2.0/
$ phpize
$ export PHP_DTRACE=yes
$ sudo dnf install libnsl
$ sudo dnf install epel-release
$ setenforce 0
8. Make sure of the instantclient path below... mine was version
11.2 so it was located in this folder... Also make note some tutorials ask for
the ORACLE_HOME folder which theoretically is /usr/lib/oracle/11.2/client64 but
if its instantclient then put the lib folder underneath it (worked for me at
least:)
$
./configure --with-oci8=instantclient,/usr/lib/oracle/12.2/client64/lib/
$ make
$ make
install
$ sudo systemctl restart httpd
$ sudo systemctl restart php-fpm
9. NOW an .so file built in: /usr/lib64/php/modules/oci8.so
10. check whether oci8 has been successfully installed or not:
php -m | grep oci8
The steps
may not be needed in most of the cases. If indeed, it is required in your case
go through these steps as well (though it is suggested to first try running
before implementing the below steps):
# THIS
STEP NOT NEEDED if SELinux disabled on your server/box, but if SELinux is
enabled run: setsebool -P httpd_execmem 1
# NOW
add: extension=oci8.so at the bottom of your php.ini file
(probably in /etc/php.ini)
# Add
extension_dir=/usr/lib64/php/modules/