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).
Installiamo il Client Oracle
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 instant-client-oracle-on-linux.
Compiliamo il driver PDO per DB Oracle
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
Configuriamo PHP5
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()
.
Possiamo vedere velocemente anche da riga di comando tutti i moduli installati lanciando il seguente comando:
$ php -m
Utilizziamo la classe PDO
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()); }