CentOS 6.7 64bit with PHP 5.3 and PDO_OCI extension


Docker

Pull the docker image

docker pull centos:6.7

List images

docker images

Run the docker image

docker run -ti centos:6.7 /bin/bash

CentOS

Update and updgrade

yum update
yum upgrade

Add EPEL repo

yum install epel-release

Install packages

yum install wget
yum install nginx
yum install php
yum install php-pear
yum install php-devel
yum install php-pdo
yum install php-fpm
yum install libaio
yum install tar
yum install gcc g++

Make and enter to download directory

cd /root
mkdir downloads
cd downloads

Download the oracle instance client 12.1

wget http://download.oracle.com/otn/linux/instantclient/121020/oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm?AuthParam=XXXXXXX -O oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm

wget http://download.oracle.com/otn/linux/instantclient/121020/oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm?AuthParam=XXXXXXX -O oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm

Install the oracle client

rpm -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
rpm -ivh oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm

Make symbol link for 64bit arch

ln -s /usr/include/oracle/12.1/client64 /usr/include/oracle/12.1/client
ln -s /usr/lib/oracle/12.1/client64 /usr/lib/oracle/12.1/client

Create $LD_LIBRARY_PATH variable

echo "LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib" >> /etc/profile.d/oracle.sh

source /etc/profile.d/oracle.sh

Test the $LD_LIBRARY_PATH variable

echo $LD_LIBRARY_PATH

Download PHP 5.3.3 for related installed version

wget http://museum.php.net/php5/php-5.3.3.tar.gz -O php-5.3.3.tar.gz

Unzip the PHP 5.3.3 and enter to pdo_oci extension directory

tar zxvf php-5.3.3.tar.gz
cd php-5.3.3
cd ext/pdo_oci

Edit the m4 config file to following content

vi config.m4

    SUPPORTED_LIB_VERS="9.0 10.1 11.1 12.1" <---

    case $PDO_OCI_VERSION in
        9.0|10.1|10.2|11.1|11.2|12.1)  <---
            PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
            ;;

        *)
            AC_MSG_ERROR(Unsupported Oracle version $PDO_OCI_VERSION)
            ;;
    esac

Generate the configure file, build and install the extension

phpize
./configure --with-pdo-oci=instantclient,/usr,12.1
make
make install

Test script

<?php
try {
    $config = array(
        "host"     => "10.0.1.2",
        "port"     => "1521",
        "database" => "xe",
        "username" => "system",
        "password" => "oracle",
    );


    // TNS
    $tns = "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = {$config['host']})(PORT = {$config['port']}))(CONNECT_DATA =(SID = {$config['database']})))";

    echo "<h3>TNS</h3>";
    echo $tns;
    echo "<hr>";

    // PDO
    $pdo = new PDO("oci:dbname=$tns", $config['username'], $config['password'], array(
        PDO::ATTR_CASE => PDO::CASE_LOWER,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
    ));

    echo "<h3>PDO</h3>";
    echo var_dump($pdo);
    echo "<hr>";

    // Query
    echo "<h3>Query</h3>";
    echo "<hr>";

    $statement = $pdo->prepare("SELECT owner, table_name FROM all_tables");
    $statement->execute();

    while($row = $statement->fetch(PDO::FETCH_OBJ)) {
        echo "<strong>owner:</strong> {$row->owner}, <strong>table_name:</strong> {$row->table_name}<br>";
    }
}catch(Exception $e) {
    echo "<pre>";
    print_r($e);
    echo "</pre>";
}