Pillole PHP: PHP + Oracle

Spread the love

Questo è un compito piuttosto ingrato perché ogni volta trovo delle novità. Come regola aurea non utiizzo PECL (PHP Extensions Communiti Library) perché qualcosa va regolarmente storto. Scarico i sorgenti della Oracle Call Interface (oci) e compilo a mano: funziona e si fa prima

$ mkdir ~/Scaricati/php/ & cd ~/Scaricati/php/
$ wget https://pecl.php.net/get/oci8-2.2.0.tgz
$ tar -xzvf oci8–2.2.0.tgz
$ cd oci8–2.2.0
$ phpize
$ ./configure — with-oci8=instantclient,/usr/lib/oracle/12.2/client64/lib
...
$ make
$ sudo make install

Per non modificare altri parametri di configurazione, sostituisco il file oggetto appena ottenuto al posto di quello di riferimento

$ sudo mv /usr/lib/php/20190902/oci8.so oci8.so.old
$ sudo cp modules/oci8.so /usr/lib/php/20190902/

Ora configuriamo Apache perché carichi questa libreria: non serve (come scritto in altri tutorial) modificare i file /etc/php/7.4/*/php.ini, ma è sufficiente aggiungere il modulo nella directory /etc/php/7.4/mods-available:

$ less /etc/php/7.4/mods-available:/oci8.ini
; configuration for php OCI8 module
; priority=20
extension=/usr/lib/php/20190902/oci8.so

Ultimo passaggio: modificare le variabili di ambiente di Apache perché ritrovi le librerie:

$ sudo nano /etc/apache2/envvars
...
[Aggiungere]
export PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/marcob/Scaricati/php/oci8-2.2.0/modules:/usr/lib/oracle/12.2/client64:/usr/lib/oracle/12.2/client64/lib
export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib
#export ORACLE_HOME=/usr/lib/oracle/12.2/client64

A questo punto riavvio il servizio

$ sudo service apache2 restart
$

E provo a far girare lo script che doveva leggere SYSDATE da una istanza Oracle e stamparlo su una pagina web:

SQL = select sysdate from dual
PRM = marcob/marcob@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=orahost.myserver.it)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=oradb)(SERVER=DEDICATED)))
Oracle correctly connected!

/var/www/html/oracle/index.php:8:
array (size=1)
  0 => 
    array (size=1)
      'SYSDATE' => string '06-FEB-20' (length=9)

Per fare un po’ di sintesi, tre sono le directory importanti per il funzionamento di questa estensione:

PathFile
/usr/lib/oracle/12.2/client64/lib Instant client nativi Oracle
/usr/lib/php/20190902/libreria Oracle client compilata
/etc/php/7.4/configurazione per agganciare il client ai comandi (riga di comando, Apache, Fast CGI)

E anch’io termino con un bel

Fine!

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.