PHP y Oracle
Epales, aca pongo mi experiencia programando con un sistema con PHP pero con bd Oracle, algo poco comun pero posible
Se me ocurrió escribir aca todo sobre la instalación del servidor Oracle en Linux pero he estado un poco corto de tiempo y se me hace un poco cuesta arriba escribir un artículo de esa magnitud, por ello solo me dedicaré en estas lineas a explicar como compilar e instalar PHP con soporte para la extensión oci8 que es la necesaria para conectarnos con una bd Oracle.
Para comenzar incluyo este link que pueden ayudar, en caso de que necesites instalar el servidor Oracle, y está muy bien escrito, si hacemos todo al pie de la letra funcionará todo ok.
http://www.oracle.com/technology/pub/articles/smiley_10gdb_install.html
Despues de instalar el Servidor Oracle en linux, necesitamos que el php esté compilado con la extensión oci8
Esto se va a llevar a cabo en un RHEL 4, el cliente Oracle se instalará en la misma máquina donde está instalado el servidor Oracle, para que el cliente Oracle nos funcione con php, es necesario tener compilado el php con soporte para la extensión oci8, normalmente esto se podría hacer con herramientas como yum o apt, que se descargan los binarios empaquetados en RPMs, pero no conseguí el RPM de php con soporte oci8, es por ello que decidí compilarlo el php para que soporte la extensión que vamos a utilizar.
1.- Lo primero es entrar en el sistema como un usuario sin privilegios, en nuestro caso se llamara “oracle”, debemos compilar el apache desde sus fuentes, en este caso vamos a instalarlo en su versión 2.0.54, descargamos desde http://www.apache.org el archivo httpd-2.0.54.tar.bz2.
$ mkdir $HOME/apache < < creamos el directorio donde vamos a instalar el apache
$ tar jxvf httpd-2.0.54.tar.bz2 << descomprimios el archivo de fuentes
$ cd httpd-2.0.54 << para entrar al directorio donde están las fuentes
$./configure --enable-module=so --prefix=$HOME/apache --with-port=9999 << con esto configuramos, mas info con ./configure --help
$ make << compilamos
$ make install << instalamos
con esto ya tenemos instalado el servidor apache
2.- Editamos $HOME/apache/conf/httpd.conf y agrega al final:
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
3.- Chequea que en $HOME/apache/conf/httpd.conf esté descomentada esta linea:
ServerName localhost
levanta el servidor apache:
$HOME/apache/bin/httpd
Chequea que esté funcionando bien poniendo en el navegador http://localhost:9999 si no hay error tu servidor apache está funcionando bien.
4.- Ahora descarga las fuentes de php desde http://www.php.net, en este caso utilizaremos la versión 4.4.0.
5.- Antes de compilar el php debemos instalar el instantclient, descargamos los RPMs necesarios de esta dirección:
http://download.oracle.com/otn/linux/instantclient/oracle-instantclient-basic-10.1.0.3-1.i386.rpm
http://download.oracle.com/otn/linux/instantclient/oracle-instantclient-devel-10.1.0.3-1.i386.rpm
y los instalamos como root:
# rpm -Uvh oracle-instantclient-basic-10.1.0.3-1.i386.rpm
# rpm -Uvh oracle-instantclient-devel-10.1.0.3-1.i386.rpm
6.- Instalamos php
$ mkdir $HOME/php << creamos el directorio donde vamos a instalar el php
$ tar jxvf php-4.4.0.tar.bz2 << descomprimios el archivo de fuentes
$ cd php-4.4.0 << para entrar al directorio donde están las fuentes
$./configure \ << con esto configuramos, mas info con ./configure --help
--with-oci8-instant-client \
--prefix=$HOME/php --with-apxs2=$HOME/apache/bin/apxs \
--enable-sigchild --with-config-file-path=$HOME/apache/conf
$ make << compilamos
$ make install << instalamos
7.- Copiamos el archivo de configuracion PHP al directorio que le dimos con el parametro --with-config-file-path
cp php.ini-recommended $HOME/apache/conf/php.ini
8.- Seteamos la variable LD_LIBRARY_PATH a /usr/lib/oracle/10.1.0.3/client/lib y reiniciamos Apache.
Si se utiliza un archivo tnsnames.ora para definir los nombres de servicios de Oracle Net, asignamos a la variable TNS_ADMIN el directorio que contiene el archivo. Es muy importante setear todas las variables de ambiente necesarias antes de iniciar el apache, yo uso este script para iniciar el apache.
-+-+-+-+-+-+-+-+-+-+-+-+-+-
#!/bin/sh
APACHEHOME=$HOME/apache
LD_LIBRARY_PATH=/usr/lib/oracle/10.1.0.3/client/lib:${LD_LIBRARY_PATH}
TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH TNS_ADMIN
echo "Starting Apache..."
$APACHEHOME/bin/httpd
-+-+-+-+-+-+-+-+-+-+-+-+-+-
9.- Para confirmar que la extensión está configurada creamos un archivo info.php y lo colocamos en $HOME/apache/htdocs/:
-+-+-+-+-+-+-+-+-+-+-+-+-+-
<?php
phpinfo();
?>
-+-+-+-+-+-+-+-+-+-+-+-+-+-
lo podemos ver en esta dirección http://localhost:9999/info.php
La página debe contener una sección llamada oci8, en la cual debe decir "OCI8 Support enabled".
10.- Ahora vamos a conectarnos a la bd oracle por medio de php,
para ello corremos este script de php
-+-+-+-+-+-+-+-+-+-+-+-+-+-
<?
$connect_str = "demo1";
$username = 'system'; // username de la bd
$pass = 'oracle'; // password de la bd
$db_conn = OCILogon($username, $pass, $connect_str );
$cmdstr = "select * from tablita";
$parsed = ociparse($db_conn, $cmdstr);
ociexecute($parsed);
$nrows = ocifetchstatement($parsed, $results);
echo "<html><head><title>Oracle PHP Test</title></head><body>";
echo "<center><h2>Oracle PHP Test</h2><br>";
echo "<table border=1 cellspacing='0' width='50%'>\n\<tr>\n";
echo "<td><b>Id</b></td>\n";
echo "<td><b>Nombre</b></td>\n";
echo "<td><b>Monto</b></td>\n";
echo "</tr>\n";
for ($i = 0; $i < $nrows; $i++ )
{
echo "<tr>\n";
echo "<td>" . $results["ID"][$i] . "</td>";
echo "<td> " . $results["NOMBRE"][$i]. "</td>";
echo "<td>$ " . number_format($results["MONTO"][$i], 2). "</td>";
echo "</tr>\n";
}
echo "<tr><td colspan='2'> Number of Rows: $nrows</td></tr></table>";
echo "<br><em>If you see data, then it works!</em><br></center></body></html>\n";
?>
-+-+-+-+-+-+-+-+-+-+-+-+-+-
Para que este script funcione debes crear un tu servidor Oracle una bd llamada demo1, tu password del sistema es oracle, y una tabla llamada tablita con los campos que ves en el script, todo eso se explica bastante bien en el manual que coloqué en el link de arriba.
Saludetes
- PHP | Time: 2:24 pm (UTC+8)

Hola pana, era para ver si estabas interesado en un intercambio de links entre tu blog y el mio. si? mandame un correo para confirmar.
Comment by Skatox — 26 de September, 2005 @ 6:49 pm
hola
Comment by grunch — 2 de October, 2005 @ 10:28 pm