Conectividad Linux PHP x84-64 y Oracle Database

by titosky

Share

La conectividad entre PHP y Oracle, bajo Linux x86 64 bits, se logra
empleando la API OCI8. Para ello es necesario instalar el Oracle Instant
Client en la máquina con el PHP. La URL para bajar los paquetes es:

http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html

Los paquetes necesarios son:
* Oracle Instant Client Basic.
* Oracle Instant Client ODBC.
* Oracle Instant Client Devel.

Una vez instalados será necesario compilar en la máquina cliente las librerías
para el PHP. Para ello necesitaremos algunos utilirarios del PEAR. Este paquete lo instalan con el comando:

 yum -y install php-pear

Luego bajamos y compilamos las librerías del OCI8 con el comando:

 pecl install oci8

Nos va a pedir el path del Oracle Install Client. Apretando ENTER debiera
elegir el path correcto.

Ahora hay que agregar la extensión al php.ini. Esto se hace con:

 echo "extension=oci8.so" >> /etc/php.ini

Reiniciamos el servidor Apache:

 service httpd restart

Ahora creamos un pequeño archivo PHP y lo cargamos a través del browser para
ver si la extensión está cargada:

 echo '<?php echo phpinfo(); ?>' > /var/www/html/info.php

Al cargar este archivo a través del browser debiera salir que está activo
el módulo OCI8.

Ahora un pequeño script para probar la conectividad a una Instancia de Oracle:

<?php


//***************************************************************************
// El query
$query = <<<EOQ
       SELECT  *
       FROM    ALL_OBJECTS
       WHERE   ROWNUM  < 20

EOQ;
//***************************************************************************
$oraUser = 'SYSTEM';
$oraPass = 'CHCHCHCHCHT';
$oraServ = '10.201.230.7/ORCL';

// $oraServ es de la forma DIRECCION_SERVER/INSTANCIA
//***************************************************************************
// Nos conectamos al servidor!

$connection = oci_connect($oraUser, $oraPass, $oraServ );

if (!$connection) {
   $e = oci_error();
   trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
//***************************************************************************
// Ejecutamos el query

$consultaObj = oci_parse($connection, $query);

oci_execute($consultaObj, OCI_DEFAULT);

//***************************************************************************
// Variable para controlar si imprimimos la cabecera o los datos.
$isFirstLine = 1;

echo '<table border="1">';
//***************************************************************************
//***************************************************************************
// Obtenemos la cantidad de columnas!
$cols = oci_num_fields($consultaObj);
//***************************************************************************

while ( $row = oci_fetch_array($consultaObj, OCI_NUM)) {

 echo "\n" ;

 for($i=0; $i<$cols; $i++) {

   // Ponemos las cabeceras de las tablas.
   if( $isFirstLine <= $cols ){
     $isFirstLine++;
     echo '<th>', oci_field_name($consultaObj,$i+1) ;

   // Estos son los datos de la tabla
   }else{
     $val = ( isset($row[$i]) ? $row[$i] : '-' );
     echo "<td>", $val ;
   }
 }
}

//***************************************************************************
echo "</table>";
//***************************************************************************

oci_free_statement($consultaObj);
oci_close($connection);
//***************************************************************************
?>

Leave a Comment