Compilare il driver PDO e connettersi ad un DB Oracle con PHP5 da Linux

Con questa guida descriveremo i passi necessari per connettersi da una macchina Linux, ad un DB Oracle con PHP5 utilizzando PDO (PHP Data Objects).

Cosa fondamentale per connettersi ad Oracle è necessario avere un Client o in alternativa l'Instant Client.

Per installare l'Instant Client è possibile seguire la guida Oracle Instant Client su Linux.

Scarichiamo dal sito php.net i sorgenti di PHP5 con la stessa versione in uso sul nostro sistema (nell'esempio la versione 5.4.30), copiamo il pacchetto nella directory /tmp (o un'altra a nostra scelta) e lo stariamo 1):

$ cp php-5.4.30.tar.xz /tmp
$ cd /tmp
$ tar xvvf php-5.4.30.tar.xz

Adesso spostiamoci nella directory contente i sorgenti del driver PDO per DB Oracle:

$ cd php-5.4.30/ext/pdo_oci/

Lanciamo il comando phpize per preparare l'ambiente alla compilazione del driver:

$ phpize

Adesso passiamo al configure il parametro –with-pdo-oci=DIR dove DIR è la directory dove si trova il Client o Instant Client Oracle:

Nel caso abbiamo settato la variabile $ORACLE_HOME:

$ ./configure --with-pdo-oci=$ORACLE_HOME

Altrimenti specifichiamo il path dell'Instant Client con questa sintassi –with-pdo-oci=instantclient,<path-instant-client>,<versione-instant-client>, ad esempio:

$ ./configure --with-pdo-oci=instantclient,/opt/oracle/client/11.2,11.2

Se non abbiamo avuto errori possiamo lanciare la compilazione vera e propria:

$ make

Al termine della compilazione avremo a disposizione il modulo compilato nella directory modules. A questo punto con l'utente root, copiamo il modulo php_oci.so nella directory dei moduli di PHP:

# cp modules/php_oci.so /usr/lib64/php/extensions

La posizione della directory dei moduli di PHP varia da distribuzione a distribuzione Linux. Per trovare quella in uso nella propria distribuzione Linux possiamo lanciare il seguente comando:

$ php-config --extension-dir

Prima di poter utilizzare nei nostri script PHP5 il driver OCI appena compilato, dobbiamo caricarlo. Da root con il nostro editor di testo preferito apriamo il file php.ini, ed aggiungiamo alla sezione Dynamic Extensions il driver:

extension=pdo_oci.so

salviamo il file php.ini e riavviamo Apache HTTP Server:

# apachectl restart

Il comando di stop & start di Apache HTTP Server può variare da distribuzione a distribuzione. Il modo più semplice è utilizzare il comando apachectl fornito dal pacchetto di Apache HTTP Server, altrimenti siamo liberi di utilizzare il comando ufficiale fornito con la propria distribuzione, ad esempio:

RedHat (e derivate)

# service httpd restart

Slackware Linux

# sh /etc/rc.d/rc.httpd restart

Debian (e derivate)

# sh /etc/init.d/apache2 restart

Adesso che abbiamo caricato il modulo vediamo se è stato caricato correttamente grazie alla nostra immancabile pagina info.php che richiama la funzione phpinfo().

info.php
<?php phpinfo();

Possiamo vedere velocemente anche da riga di comando tutti i moduli installati lanciando il seguente comando:

$ php -m

Adesso possiamo utilizzare la classe PDO per connettersi al nostro DB Oracle.

  try {
 
    // Se stiamo usando l'entry nel tnsnames.ora
    // possiamo specificare l'istanza Oracle
    $PDO = new PDO("oci:dbname=orcl", $username, $password);
 
    // Se stiamo usando l'instant client possiamo
    // specificare la macchina, porta e istanza Oracle
    $PDO = new PDO("oci:dbname=//localhost:1521/orcl", $username, $password);
 
    $dbh = $PDO->prepare("SELECT sysdate AS date FROM dual");
    $sth = $dbh->execute();
 
    if ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
      var_dump($row["date"]);
    }
 
  } catch(PDOException $e) {
    var_dump($e->getMessage());
  }
1) scompattiamo il tar