Since keep a compilation environment for building extensions can be impossible or simply undesirable, I wrote an Docker image for it alongside a Docker Compose configuration to compile the binaries. However, the setup of this extensions are still under your responsability.
Clone the repository using git
$ git clone https://github.com/tassoevan/pdo-oci-extension.git
or download and unzip it. You'll be working inside
the pdo-oci-extension
directory now.
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
, and should by placed in the builder/instantclient/
directory.
$ docker-compose build bionic
$ docker-compose run bionic
The image build command is often automatically performed during container creation, but it's interesting to perform it as an isolated step since all compilation workload is in it.
The built files oci8.so
and pdo_oci.so
will be under build/bionic
directory.
Run the following command to getting your PHP extensions directory.
$ ext_dir=`php -r 'echo ini_get("extension_dir");'`
$ echo $ext_dir
Copy the compiled binaries to it.
$ cp build/bionic/oci8.so build/bionic/pdo_oci.so "${ext_dir}/"
Create the configuration files and enable them for load these extensions.
$ echo 'extension=oci8.so' > /etc/php/7.2/mods-available/oci8.ini
$ phpenmod oci8
$ echo 'extension=pdo_oci.so' > /etc/php/7.2/mods-available/pdo_oci.ini
$ phpenmod pdo_oci
Now you have all oci_*
functions and the PDO oci
DSN prefix available in PHP. Confirm it using running:
$ php -r 'echo "OCI8 is " . (function_exists("oci_connect") ? "on" : "off") . "\n";'
$ php -r 'echo "PDO OCI driver is " . (in_array("oci", PDO::getAvailableDrivers()) ? "on" : "off") . "\n";'