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);
//***************************************************************************
?>