You'll need some essentials to compile C programs, a I/O library, unzip to uncompress sources, and wget and SSL
certificates to download files.
$ apt-get install -y build-essential re2c libaio1 unzip wget ca-certificatesObviously, you need PHP intepreter installed too. However, you need the development package to be able to compile additional extensions by yourself.
$ apt-get install -y php7.2 php7.2-cli php7.2-devAttention! Before proceed, confirm your PHP version running php --version.
Unfortunatelly, the Oracle Instant Client
download can't be automated due license terms. That means you must be registered in Oracle (it's free) and get the ZIP
files by yourself. They are instantclient-basic-linux.x64-12.2.0.1.0.zip and
instantclient-sdk-linux.x64-12.2.0.1.0.zip.
/opt/oracle/instantclient is the right directory for the job of containing Instant Client files.
$ mkdir -p /opt/oracle/instantclientUnzip Instant Client basic files into /opt/oracle.
$ unzip instantclient-basic-linux.x64-12.2.0.1.0.zip -d /opt/oracleIt'll create /opt/oracle/instantclient_12_2 directory, that should be moved into our previously created directory as a
lib directory.
$ mv /opt/oracle/instantclient_12_2 /opt/oracle/instantclient/libSame goes for Instant Client SDK files, which are essentially headers.
$ unzip instantclient-sdk-linux.x64-12.2.0.1.0.zip -d /opt/oracle
$ mv /opt/oracle/instantclient_12_2/sdk/include /opt/oracle/instantclient/includeSome libraries have an irrelevant version number that can be safely ignored with a little hack:
$ ln -s /opt/oracle/instantclient/lib/libclntsh.so.12.1 /opt/oracle/instantclient/lib/libclntsh.so
$ ln -s /opt/oracle/instantclient/lib/libocci.so.12.1 /opt/oracle/instantclient/lib/libocci.soAttention! Despite the .12.1 in file names, they are present in Instant Client 12.2 too.
The Oracle libraries directory must be accessible anywhere:
$ echo /opt/oracle/instantclient/lib >> /etc/ld.so.conf
$ ldconfigThe Oracle Call Interface is present in PHP through the OCI8 extension which, according the docs, enables access to Oracle Database 12c, 11g, 10g, 9i and 8i.
It's installed using pecl:
$ pecl install oci8-2.1.8
When prompted for Instant Client path, just type instantclient,/opt/oracle/instantclient/lib.
Now the OCI8 extension is compiled and installed, but disabled. To enable it:
$ echo 'extension=oci8.so' > /etc/php/7.2/mods-available/oci8.ini
$ phpenmod oci8Now you have all oci_* functions available for PHP. Confirm it using running:
$ php -r 'echo "OCI8 is " . (function_exists("oci_connect") ? "on" : "off") . "\n";'Attention! The PDO OCI driver was an experimental extension maintened by the PHP community. Since you're dealing with a unsupported version of PHP, I think stability and safety aren't in your concerns. I recommend you to see the taq/pdooci.
Download and unzip the PHP source code.
$ wget -O /tmp/php-7.2.5.zip https://github.com/php/php-src/archive/php-7.2.5.zip
$ unzip /tmp/php-${php_version}.zip -d /tmpNavigate to the extension source directory and patch config.m4 to replace Instant Client version.
$ cd /tmp/php-src-php-7.2.5/ext/pdo_oci
$ sed 's/10.1/12.1/' -i config.m4Prepare, build, and install:
$ phpize
$ ./configure --with-pdo-oci=/opt/oracle/instantclient
$ make installNow the PDO OCI driver is compiled and installed, but disabled. To enable it:
$ echo 'extension=pdo_oci.so' > /etc/php/7.2/mods-available/pdo_oci.ini
$ phpenmod pdo_ociNow oci DSN prefix is available in PDO. Confirm it using running:
$ php -r 'echo "PDO OCI driver is " . (in_array("oci", PDO::getAvailableDrivers()) ? "on" : "off") . "\n";'