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:
Nos centraremos exclusivamente en la instalación del PDO_OCI, ejecutaremos los siguientes pasos como root:
1- Obtener extensión y descomprimir
2- Fijar el directorio del home de oracle ( en el caso de que no esté definido)
3-Creamos unos enlaces (el configure da problemas si no están) para la versión de 64 bits
Archivo config.m4:
Línea 10
Línea 125
Archivo configure:
Línea 5492:
5- Para Solucionar el errores:
6- Ejecutamos el configure, compilamos e instalamos ( no debería salir mensaje de error)
9- Verificamos que se ha cargado correctamente con alguno de los siguientes comandos para listar los módulos cargados:
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.hEjecutaremos lo siguiente:
mkdir includePara el error
ln -s /usr/include/php5/ include/php
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.27- Añadimos el módulo a php
make && make install
echo extension=pdo_oci.so > /etc/php5/conf.d/pdo_oci.ini8- 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 PDOo directamente un phpinfo desde el navegador:
php -r "phpinfo();" | grep -i PDO_OCI
Comentarios
Eso si, tengo una pequeña duda:
en mi phpinfo(); en la seccion de PDO_OCI, solo me aparece el encabezado de la tabla que dice:
PDO Driver for OCI 8 and later enabled
Mientras que en otros pdo, me sale por lo menos una fila con datos, como en:
pdo_mysql
PDO Driver for MySQL enabled
Client API version mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $
Es esto normal en el pdo_oci?
Nuevamente muchas, gracias y saludos :)
PDO_OCI
PDO Driver for OCI 8 and later enabled