This is an old revision of the document!
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 Oracle Instant Client su Linux.
Compiliamo il driver PDO per DB Oracle
Scarichiamo dal sito php.net i sorgenti di PHP5, 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 preferito apriamo il file php.ini
, ed aggiungiamo alla sezione Dynamic Extensions il driver:
extensions=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 usare quello 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()); }