Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
how-to:php-and-oracle-with-pdo-oci [2014/07/18 12:28] Giuseppe Di Terlizzihow-to:php-and-oracle-with-pdo-oci [2016/04/12 18:20] (current) Giuseppe Di Terlizzi
Line 1: Line 1:
-====== Connettersi al DB Oracle tramite PHP5 e PDO da Linux ======+====== Compilare il driver PDO e connettersi ad un DB Oracle con PHP5 da Linux ======
  
 {{http://php.net/images/php.gif }} Con questa guida descriveremo i passi necessari per connettersi da una macchina Linux, ad un DB Oracle con PHP5 utilizzando PDO (PHP Data Objects). {{http://php.net/images/php.gif }} Con questa guida descriveremo i passi necessari per connettersi da una macchina Linux, ad un DB Oracle con PHP5 utilizzando PDO (PHP Data Objects).
Line 10: Line 10:
  
  
-===== Compiliamo il driver PDO per Oracle =====+===== Compiliamo il driver PDO per DB Oracle =====
  
-Scarichiamo dal sito php.net i sorgenti di PHP5 copiamo il pacchetto nella directory ''/tmp'' e lo scompattiamo:+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 ((scompattiamo il tar)):
  
   $ cp php-5.4.30.tar.xz /tmp   $ cp php-5.4.30.tar.xz /tmp
Line 18: Line 18:
   $ tar xvvf php-5.4.30.tar.xz   $ tar xvvf php-5.4.30.tar.xz
  
-Adesso spostiamoci nella directory contente i sorgenti del driver PDO per Oracle:+Adesso spostiamoci nella directory contente i sorgenti del driver PDO per DB Oracle:
  
   $ cd php-5.4.30/ext/pdo_oci/   $ cd php-5.4.30/ext/pdo_oci/
      
-Lanciamo il comando ''phpize'' per preparare il necessario alla compilazione del driver:+Lanciamo il comando ''phpize'' per preparare l'ambiente alla compilazione del driver:
  
   $ phpize   $ phpize
  
-Adesso lanciamo la compilazione vera e propria passando al ''configure'' il parametro ''--with-pdo-oci=DIR'' dove ''DIR'' è la directory dove si trova il //Client// o //Instant Client// Oracle:+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'': Nel caso abbiamo settato la variabile ''$ORACLE_HOME'':
Line 32: Line 32:
   $ ./configure --with-pdo-oci=$ORACLE_HOME   $ ./configure --with-pdo-oci=$ORACLE_HOME
      
-Altrimenti specifichiamo il path dell'//Instant Client// con questa sintassi ''--with-pdo-oci=instantclient,<path>,<versione>'', ad esempio:+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   $ ./configure --with-pdo-oci=instantclient,/opt/oracle/client/11.2,11.2
  
-Se non abbiamo avuto errori possiamo lanciare la compilazione:+Se non abbiamo avuto errori possiamo lanciare la compilazione vera e propria:
  
   $ make   $ make
  
-Al termine della compilazione avremo a disposizione il modulo compilato nella directory ''modules''. A questo punto possiamo prendere il modulo e copiarlo nella directory di default di PHP con utente ''root'':+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   # cp modules/php_oci.so /usr/lib64/php/extensions
 +
 +<div round tip 90% center>
 +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
 +</div>
  
 ===== Configuriamo PHP5 ===== ===== 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:+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:
  
-  extensions=pdo_oci.so+  extension=pdo_oci.so
  
-salviamo il file ''php.ini'' e riavviamo Apache HTTPD Server:+salviamo il file ''php.ini'' e riavviamo //Apache HTTP Server//:
  
   # apachectl restart   # apachectl restart
  
-Adesso che abbiamo caricato il modulo vediamo se è stato caricato correttamente grazie alla nostra immancabile pagina //info.php// che richiama la funzione ''php_info()''.+<div tip round 90% center> 
 + 
 +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 
 + 
 +</div> 
 + 
 +Adesso che abbiamo caricato il modulo vediamo se è stato caricato correttamente grazie alla nostra immancabile pagina //info.php// che richiama la funzione ''phpinfo()''. 
 + 
 +<file .php info.php> 
 +<?php phpinfo(); 
 +</file> 
 + 
 +<div tip round 90% center> 
 +Possiamo vedere velocemente anche da riga di comando tutti i moduli installati lanciando il seguente comando: 
 +   
 +  $ php -m 
 +</div> 
 + 
 +===== Utilizziamo la classe PDO ===== 
 + 
 +Adesso possiamo utilizzare la classe PDO per connettersi al nostro DB Oracle. 
 + 
 +<code .php> 
 + 
 +  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()); 
 +  } 
 + 
 +</code>
  
-====== Utilizziamo PDO =====+===== Link utili ===== 
 +  * [[how-to:instant-client-oracle-on-linux]] 
 +  * [[http://php.net/manual/en/ref.pdo-oci.php|PHP.net - PDO OCI Driver]] 
 +  * [[http://php.net/manual/en/ref.pdo-oci.connection.php|PHP.net - PDO OCI DNS]]
  
 {{tag>how-to linux php pdo oracle}} {{tag>how-to linux php pdo oracle}}
  • how-to/php-and-oracle-with-pdo-oci.1405679282.txt.gz
  • Last modified: 10 years ago
  • (external edit)