Mostrando las entradas para la consulta oci ordenadas por relevancia. Ordenar por fecha Mostrar todas las entradas
Mostrando las entradas para la consulta oci ordenadas por relevancia. Ordenar por fecha Mostrar todas las entradas

IIS7 y php5 en windows vista : Oci8

La version de windows Vista profesional tiene la posibilidad de activar el servidor internet information services 7. Nuestra idea es Configurarlo para que podamos usar php y acceder a oracle mediante oci.

Instalación IIS 7 :

1) Panel de control / Programas / Activar o desactivar Características de Windows
2) buscamos el IIS y selecionamos las caracteristicas que necesitemos. Al menos debemos marcar en Caracteristicas de desarrollo de aplicaciones las opciones de "Extensiones Isapi" y "filtros ISAPI"
3)Si mas adelante necesitamos alguna otra característica podremos añadirla del mismo modo sin problema ninguno.

Instalacion de php:

1) bajamos php de http://www.php.net/downloads.php . Yo he usado la que viene con el instalador.
2)Ejecutamos la instalación y durante la misma se nos preguntarán si queremos instalar php para algun servidor web, seleccionamos isapi para IIS.
3) En la selección de módulos escogemos al menos la extensión oracle8. No es conveniente instalar todos los módulos ya que muchos tienen dependencias externas, y dará error al ejecutar php. En el futuro podemos instalar nuevos módulos a través de Panel de control/"Programas y caractreristicas"/php 5.X.Y/botón derecho / cambiar.

Probando PHP:
1) inicio/ejecutar/php y le damos a aceptar
2) Nos saldrá un error: "no se encontró OCI.dll" y un "unable to load dynamic library php_oci8.dll". Esto es debido a que faltan algunos archivos porque no tenía instalado oracle en este ordenador.

Instalación del INSTANT CLIENT de oracle
1) descargamos el instant client de oracle: http://www.oracle.com/technology/tech/oci/instantclient/index.html . Yo escogi la versión Basic
2) La descomprimimos por ejemplo en c:\oracle
3) Añadimos "c:\oracle" a la variable de entorno "PATH". Para ello Inicio/equipo/boton derecho/propiedades/Configuración Avanzada del sistema/opciones Avanzadas/Variables de Entorno. Debemos editar la variable "PATH" que se encuentra en las "Variables del Sistema", no en las "Variables de usuario". Si metemos la ruta en las de usuario se cargara oci en una ventana de consola pero no en IIS, ya que es un servicio.
4) ejecutamos de nuevo php y no debería salir de nuevo el error. Si sale habria que probar a revisar que se haya escrito correctamente el path y a reiniciar el ordenador.

Si tenemos oracle instalado en el ordenador, no hace falta bajar el instant client, únicamente añadiriamos la ruta de las librerias de Oracle al path.Tal y como hicimos en el paso 3, las librerias suelen estar el subdirectorio lib de oracle que debería tener la oci.dll.

Configurando IIS para ejecutar php:

1) Ejecutamos el IIS Manager (inetmgr.exe)
2) Nos vamos a "Filtros ISAPI", le damos a agregar. En nombre de filtro ponemos lo que queramos y en ejecutable "C:\Program Files\PHP\php5isapi.dll" (o la ruta donde lo instalamos)
3)Volvemos atrás y pulsamos "Restricciones de ISAPI y CGI", agregar. En ruta de acceso ponemos "C:\Program Files\PHP\php5isapi.dll", en descripcion por ejemplo "php5isapi". Y marcamos "Permitir ejecución de la ruta de extensión".
4)Volvemos al menu. Y pulsamos "Asignación de controlador" y luego "Modificar asignación de script". En "ruta de acceso de solicitudes escribimos *.php, en ejecutable C:\Program Files\PHP\php5isapi.dll , en nombre por ejemplo PHP. En el botón de "restricción de solicitudes debemos marcar "invocar controlador solo si..." y "Archivo", en la pestaña verbos, "todos los verbos".

Probamos una página que tenga php y todo debería funcionar bien. En el caso de que podamos ejecutar php en linea de comando pero falle en ISS alguno de lo módulos deberíamos darle permiso al iss para acceder a las carpetas de PHP (C:\Program Files\PHP\) y de ORACLE (c:\Oracle). Para ello.
1) vamos al explorador de windos
2) buscamos la carpeta C:\Oracle
3) botón derecho/propiedades/seguridad/Editar
4) Pulsamos el botón Agregar, y en nombre de objeto ponemos IUSR.Como permisos los fijamos en "lectura y ejecución".

ISUR es el usuario con el que se conecta ISS para peticiones anónimas.Para saber como se llama volvemos al administrador de IIS/Autenticacion. En "Autenticación Anónima", si le damos a modificar aparece el usuario con el que se conecta.

Es probable que slaga un mensaje de error del tipo "IIS Worker Process stopped working". SI miramos en "administracion de equipos/Eventos" . Veremos un aviso cuyo origen es WAS y el id del evento es el 5186. He indica que:
"Un proceso de trabajo con el Id. de proceso de '688' que sirve al grupo de aplicaciones 'DefaultAppPool' se cerró por inactividad". Para evitar que salga nos vamos de nuevo al ISS y en "grupo de Aplicaciones" modificamos "DefaultAppPool" .

Instalar Extension PDO_OCI en Suse Linux

En los siguientes pasos instalaremos el módulo php_pdo_oci en una maquina SLES 11 de 64 bits, que tiene instalado el instant client 11.2 Dicha máquina ya tenía instalado varias elementos necesarios para que este módulo funcione.

Sobre la instalación del instant client de Oracle, y el módulo oci8 hay más información en el siguiente post:

- Instalación del Oracle Instant Client y configuración de Oci8 en php y apache en Suse


Nos centraremos exclusivamente en la instalación del PDO_OCI, ejecutaremos los siguientes pasos como root:

1- Obtener extensión y descomprimir
wget http://pecl.php.net/get/PDO_OCI
tar zxvf PDO_OCI
cd PDO_OCI-1.0/
phpize

2- Fijar el directorio del home de oracle ( en el caso de que no esté definido)
export ORACLE_HOME=/usr/lib/oracle/11.2/client64

3-Creamos unos enlaces (el configure da problemas si no están) para la versión de 64 bits

ln -s /usr/lib/oracle/11.2/client64 /usr/lib/oracle/11.2/client
ln -s /usr/include/oracle/11.2/client64 /usr/lib/oracle/11.2/client/include
4-Parcheamos para la versión 11.2 los archivos añadiendo en secciones similares las siguientes líneas (el número de linea es orientativo). De forma alternativa podemos sustituir la cadena de texto 10.2 por 11.2 Esto soluciona el error :
Configure: error: Unsupported Oracle version! 11.2

Archivo config.m4:
Línea 10
elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then
PDO_OCI_VERSION=11.2

Línea 125
11.2)
PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
;;

Archivo configure:
Línea 5492:
11.2)


case clntsh in
c|c_r|pthread*) ;;
*)
if test "$ext_shared" = "yes"; then
PDO_OCI_SHARED_LIBADD="$PDO_OCI_SHARED_LIBADD -lclntsh"
else


case clntsh in
c|c_r|pthread*) ;;
*)
LIBS="$LIBS -lclntsh"
;;
esac


fi
;;
esac


;;

5- Para Solucionar el errores:
Cannot find php_pdo_driver.h
Ejecutaremos lo siguiente:
mkdir include
ln -s /usr/include/php5/ include/php
Para el error
pdo_oci.c:34:1: error: unknown type name 'function_entry'
Editamos el archivo pdo_oci.c y cambiamos el function_entry por zend_function_entry


6- Ejecutamos el configure, compilamos e instalamos ( no debería salir mensaje de error)
./configure --with-pdo-oci=instantclient,/usr,11.2
make && make install
7- Añadimos el módulo a php
echo extension=pdo_oci.so > /etc/php5/conf.d/pdo_oci.ini
8- Reiniciamos apache
rcapache2 restart

9- Verificamos que se ha cargado correctamente con alguno de los siguientes comandos para listar los módulos cargados:
php -m | grep -i PDO
php -r "phpinfo();" | grep -i PDO_OCI
o directamente un phpinfo desde el navegador:

Instalación del Oracle Instant Client y configuración de Oci8 en php y apache en Suse

Vamos a instalar el instant client de la version 11 de oracle en una máquina son Suse Linux Enterprise Server (SLES11) versión de 64 bits. Configuraremos ademas el módulo oci8 para que se cargue en php y en apache.

En la versión Enterprise necesitaremos tener algunos paquetes de desarrollo entre otros instalaremos los siguientes:
zypper in php5-devel autoconf php5-pear
Si no están en los repositorios tendremos que instalar (sólo en la versión Enterprise, en opensuse estan por defecto) el SUSE Linux Enterprise SDK 11, más info aqui
Cómo instalar SUSE Linux Enterprise SDK 11

En este caso no tenemos oracle instalado por lo que usaremos las librerías del oracle instant client para poder conectarnos a un oracle en remoto.

1- Descargar el instant client y el devel
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

La Version 11.2.0.2.0 tienes estas url
http://download.oracle.com/otn/linux/instantclient/112020/oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm
http://download.oracle.com/otn/linux/instantclient/112020/oracle-instantclient11.2-devel-11.2.0.2.0.x86_64.rpm

2- Instalar instant client de Oracle una vez descargados
rpm -Uvh oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm
rpm -Uvh oracle-instantclient11.2-devel-11.2.0.2.0.x86_64.rpm

(para ver los archivos y las rutas que nos harán falta para configurar oci8)
rpm -ql oracle-instantclient11.2-basic-11.2.0.2.0
/usr/lib/oracle/11.2/client64/bin/adrci
/usr/lib/oracle/11.2/client64/bin/genezi
/usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1
/usr/lib/oracle/11.2/client64/lib/libnnz11.so
/usr/lib/oracle/11.2/client64/lib/libocci.so.11.1
/usr/lib/oracle/11.2/client64/lib/libociei.so
/usr/lib/oracle/11.2/client64/lib/libocijdbc11.so
/usr/lib/oracle/11.2/client64/lib/ojdbc5.jar
/usr/lib/oracle/11.2/client64/lib/ojdbc6.jar
/usr/lib/oracle/11.2/client64/lib/xstreams.jar

3-Obtener oci8, y descomprimir
wget http://pecl.php.net/get/oci8-1.4.3.tgz
tar -zxvf oci8-1.4.3.tgz
cd oci8-1.4.3/

4- configurar el modulo con la ruta del instant client ( /usr/lib/oracle/11.2/client64/lib )
phpize
./configure -with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client64/lib
5- Instalar el paquete
sudo make install

6- Verificar que se ha instalado correctamente
ls -la /usr/lib64/php5/extensions/oci8.so

7- Cambiar los permisos
sudo chmod 644 /usr/lib64/php5/extensions/oci8.so

8- Crear enlace simbólico
sudo ln -s /usr/lib/oracle/11.2/client64/lib/libnnz11.so /usr/lib64/libnnz11.so

9- Editar archivo php.ini ( /etc/php5/apache2/php.ini ) para añadir el modulo oci (que debe estar bien instalado en /usr/lib64/php5/extensions ) o bien creamos el archivo
/etc/php5/conf.d/oci8.ini para que se cargue el modulo tanto en php como en linea de comandos. En ambos casos tenemos que añadir la linea extension=oci8.so. Optamos por la segunda opción:
echo extension=oci8.so > /etc/php5/conf.d/oci8.ini
10- Reiniciar apache
rcapache2 restart

11- todo deberia estar cargado y funcionando. Podemos verificar que esta todo correcto:

11.1 ejecutando phpinfo desde linea de comandos
php -r "phpinfo();" | grep oci8

11.2 Con phpinfo en una web (con el contenido )

11.3 Comprobando si hay errores en apache
cat /var/log/apache2/error_log | grep 'oci8.so'

Fuentes:
http://en.opensuse.org/SDB:Howto_build_oci8_extension_module_for_php
http://dieguz2.blogspot.com/2007/11/opensuse-oracle-php-y-apache-oci8.html

Relacionado:
http://dieguz2.blogspot.com/2007/11/conexion-mediantes-tnsnamesora.html

Conexion mediante alias : tnsnames.ora

Tanto si usamos windows como linux podemos conectarnos a BD oracles usando alias de conexión. Para ello debemos hacer lo siguiente

1) Si es posible cogeremos el tnsnames.ora de la máquina a la que queremos acceder. En el archivo vendrá mas información del a que necesitamos, asi que cogemos únicamente la que se refiera a la instancia a la que queremos acceder.Por ejemplo el que tenía en mi servidor era algo asi:
MIALIAS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = unamaquina.es.com)(PORT = ELPUERTO))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = instancia)
(INSTANCE_NAME = instancia)
)
(HS = OK)
)


2) Añadimos lo anterior a nuestro tnsnames.ora o bien creamos uno con esa información
3) Definimos la variable de entonrno NS_ADMIN apuntando al directorio donde está el tnsnames.ora. normalmente sera $ORACLE_HOME\network\admin si por ejemplo tenemos el instant client en c:\oracle pues hacemos que apunte ahí
4) Un ejemplo de conexión podría ser este:
$c=oci_connect('usuario', 'contraseña','mialias');
oci_close($c);

Par mas info sobre el oci pulsa aqui.