Conexión PHP y Oracle GNU/Linux

Para comenzar debemos tener apache y php instalado en nuestro servidor.

 Luego descargamos el paquete básico y el paquete sdk Cliente Oracle desde la página de descargas de Oracle. (Basic and the SDK Instant Client packages).

Si bien pueden utilizar los paquetes .zip y los RPM, es recomendable que utilicen los RPM.

rpm -Uvh oracle-instantclient11.2-basic-<version>.x86_64.rpm
rpm -Uvh oracle-instantclient11.2-devel-<version>.x86_64.rpm

El primero coloca las librerías dentro del directorio /usr/lib/oracle/11.2/client64/lib y el segundo crea los cabezales dentro de /usr/include/oracle/11.2/client64.

Instalamos OCI con el comando pecl

pecl install oci8

Esto va a consultar el path al directorio ORACLE_HOME. Si lo instalamos utilizando RPM, solo presionamos ENTER y PECL instalará automaticamente oci8.so

Editamos el archivo /etc/php.ini, agregamos el directorio y habilitamos la extensión de OCI8

extension_dir=/usr/lib64/php/modules/
extension=oci8.so

Agregamos el directorio de las librerias de Oracle en el archivo /etc/ld.so.conf

LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client64/lib

Finalmente reiniciamos el servicio de apache

service httpd restart

Una forma de testear esto es con el comando

php -i | grep OCI8

Si todo salió ok, vamos a ver lo siguiente: OCI8 Support => enabled

Creamos el directorio oracle dentro de /etc/ y dentro el archivo tnsname.ora para que OCI sepa a dónde se debe conectar.

<Mi servicio>=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(COMMUNITY = tcp.world)
(PROTOCOL = TCP)
(Host = <IP>)
(Port = 1521)
)
(ADDRESS =
(COMMUNITY = tcp.world)
(PROTOCOL = TCP)
(Host = <IP>)
(Port = 1526)
)
)
(CONNECT_DATA = (SERVICE_NAME = <Mi Servicio>)
)
)

 

<Mi Servicio>.world =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(COMMUNITY = tcp.world)
(PROTOCOL = TCP)
(Host = <IP>)
(Port = 1521)
)
(ADDRESS =
(COMMUNITY = tcp.world)
(PROTOCOL = TCP)
(Host = <IP>)
(Port = 1526)
)
)
(CONNECT_DATA = (SERVICE_NAME = PROD)
)
)

Con TNS_ADMIN le indicamos a dónde ir a buscar los tnsnames.ora.

export TNS_ADMIN=/etc/oracle

Para probar la conexión podemos crear el archivo test.php y con lo siguiente

<?php
 
$conn = oci_connect(‘<usuario>’, ‘<clave>’, ‘//<host>/<servicio>’);
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e[‘message’], ENT_QUOTES), E_USER_ERROR);
}
$stid = oci_parse($conn, “SELECT * FROM usuarios;”);
oci_execute($stid);
echo “<table border=’1′>n”;
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
echo “<tr>n”;
foreach ($row as $item) {
echo ” <td>” . ($item !== null ? htmlentities($item, ENT_QUOTES) : “& nbsp;”) . “</td>n”;
}
echo “</tr>n”;
}
echo “</table>n”;
?>