Instalación
Instalación de OCI8 desde PECL utilizando el comando pecl
La extensión OCI8 puede ser añadida a una instalación PHP existente utilizando
el repositorio » PECL.
-
Si se encuentra detrás de un firewall, defínase el proxy de PEAR, por ejemplo:
-
Ejecútese:
Para PHP 7, utilícese pecl install oci8-2.2.0
.
-
Cuando se le solicite, introdúzcase el valor de $ORACLE_HOME
o
instantclient,/ruta/al/directorio/instant/client/lib
.
Nota: No se introduzcan nombres de variables como $ORACLE_HOME
o $HOME
ya que pecl
no los
expandirá. En su lugar, introdúzcase una ruta expandida, por ejemplo /opt/oracle/product/19c/dbhome_1
o instantclient,/Users/monnom/Descargas/instantclient_19_8
.
-
Si se obtiene un error oci8_dtrace_gen.h: No existe el archivo o
directorio
, esto significa que PHP ha sido compilado
con DTrace Dynamic Tracing activado.
Instálese utilizando el comando:
-
Modifíquese el archivo php.ini y añádase la línea:
Asegúrese de que la directiva php.ini
extension_dir está
definida en el directorio en el cual oci8.so ha sido instalado.
Instalación de OCI8 desde PECL utilizando phpize
Para instalar OCI8 en una instalación PHP existente cuando
el comando pecl
no está disponible, descárguese manualmente
el paquete OCI8 » PECL,
por ejemplo oci8-3.0.0.tgz.
-
Extraer el paquete:
-
Preparar el paquete:
-
Configurar el paquete utilizando $ORACLE_HOME
o Instant Client.
o
-
Instalar el paquete:
-
Si se obtiene un error oci8_dtrace_gen.h: No existe el archivo o
directorio
, esto significa que PHP ha sido compilado
con DTrace Dynamic Tracing activado.
Ejecútese nuevamente los comandos configure
y make
después de haber definido esta variable de entorno:
-
Modifíquese el archivo php.ini y añádase la línea:
Asegúrese de que la directiva php.ini
extension_dir está
configurada en el directorio en el cual oci8.so
ha sido instalado.
Instalación de OCI8 como extensión compartida durante la compilación de PHP
Si se compila PHP a partir del código fuente, la opción de configuración shared
puede ser utilizada para construir OCI8 como una biblioteca compartida que puede ser cargada dinámicamente en PHP. La construcción de una extensión compartida permite a OCI8 ser fácilmente actualizado sin afectar al resto de PHP.
Configúrese OCI8 utilizando una de las siguientes opciones de configuración.
-
Si se utilizan las bibliotecas gratuitas » Oracle Instant
Client, hágase lo siguiente:
Si Instant Client 12.2 (o una versión anterior) está instalado a partir de archivos ZIP, asegúrese de crear
primero el enlace simbólico a la biblioteca, por ejemplo ln -s
libclntsh.so.12.1 libclntsh.so
.
Si se utiliza una instalación basada en RPM de Oracle Instant Client,
la línea de configuración se verá así:
Por ejemplo, --with-oci8=shared,instantclient,/usr/lib/oracle/19.9/client/lib
-
Si se utiliza una base de datos Oracle o una instalación completa de Oracle Client, procedase de la siguiente manera:
Asegúrese de que el usuario del servidor web (nobody
, www
) tiene acceso a las
bibliotecas, a los archivos de inicialización
y al archivo tnsnames.ora (si se utiliza) bajo
el directorio $ORACLE_HOME
. Con Oracle
10gR2, puede que sea necesario ejecutar
la utilidad $ORACLE_HOME/install/changePerm.sh
para dar acceso al directorio.
Después de la configuración, sigase el procedimiento habitual de compilación de PHP,
por ejemplo make install. La extensión compartida OCI8 oci8.so
será creada. Puede ser necesario moverla manualmente al directorio de extensiones PHP, especificado por
la opción extension_dir en su
archivo php.ini.
Para completar la instalación de OCI8, modifíquese el archivo php.ini y añádase la línea:
Instalación de OCI8 como extensión compilada estáticamente durante la compilación de PHP
Si se compila PHP a partir del código fuente, puede configurarse PHP para incluir
OCI8 como una extensión estática utilizando una de las siguientes opciones de configuración.
-
Si se utiliza Oracle Instant Client, hágase lo siguiente:
-
Si se utiliza una base de datos Oracle o una instalación completa del cliente Oracle, hágase lo siguiente:
Después de la configuración, sigase el procedimiento habitual
de construcción de PHP, por ejemplo make install. Después de una compilación
exitosa, no es necesario añadir oci8.so a
su php.ini. No se requiere ningún paso adicional de construcción.
Instalación de OCI8 bajo Windows
La biblioteca OCI8 puede ser añadida a una instalación existente de PHP utilizando
las DLL del repositorio » PECL o las bibliotecas situadas en el directorio
ext
de su instalación PHP.
Con las bibliotecas Oracle 12c (o posteriores), descoméntese una de las
siguientes líneas en su archivo php.ini extension=php_oci8_12c.dll
o extension=php_oci8_11g.dll
, o bien
extension=php_oci8.dll
. Solo una de estas DLLs debe
estar activa al mismo tiempo. Las DLLs con versiones superiores pueden
contener más funcionalidades. Todas las DLLs pueden no estar disponibles
para todas las versiones de PHP. Asegúrese de que la opción
extension_dir está definida en la carpeta
que contiene las extensiones DLL de PHP.
Si se utiliza el cliente Oracle Instant, defínase la variable
de entorno PATH del sistema a la carpeta que contiene las
bibliotecas Oracle.
Definición del entorno Oracle
Antes de utilizar esta extensión, asegúrese de que las variables de entorno
Oracle están correctamente definidas para el usuario que ejecuta el servidor Web.
Si su servidor Web se inicia automáticamente al arrancar el servidor,
entonces asegúrese también de la correcta configuración de la variable
de entorno utilizada en ese momento.
Nota:
No se definan las variables de entorno Oracle utilizando la función
putenv() en sus scripts PHP, ya que las bibliotecas
Oracle son cargadas e inicializadas antes de la ejecución de su script.
Las variables definidas con putenv() podrían
entrar en conflicto y provocar tanto fallos como comportamientos totalmente inesperados. Algunas funciones pueden reaccionar
normalmente, otras pueden provocar errores. Las variables
deben ser definidas antes del inicio del
servidor.
En los sistemas Red Hat Linux y sus variantes, debe exportarse
las variables al final del archivo /etc/sysconfig/httpd.
En otros sistemas que utilicen Apache 2, debe utilizarse el
script envvars que se encontrará en el directorio
bin de Apache. Otra opción consiste en utilizar
la directiva SetEnv
del archivo
httpd.conf, pero esto puede no ser suficiente
en algunos sistemas.
Para verificar si las variables de entorno han sido definidas
correctamente, utilícese la función phpinfo()
y prestese atención a la sección Environment
(y no a la sección Apache Environment);
debe contener todas las variables definidas.
Las variables que se necesitan están
incluidas en la tabla siguiente. Consúltese la documentación Oracle
para más información sobre todas las variables.
Variables de entorno Oracle comunes
Nombre |
Propósito |
ORACLE_HOME |
Ruta al directorio que contiene el software de base de datos
Oracle. No se defina esta variable si se utiliza el cliente
Oracle Instant. De hecho, no es necesaria pero puede causar
problemas durante la instalación.
|
ORACLE_SID |
El nombre de la base de datos en la máquina local. No es
necesario definirla si se utiliza el cliente Oracle Instant,
o entonces, pasarla siempre como argumento de conexión a la
función oci_connect(). |
LD_LIBRARY_PATH |
Defínase esta variable (o su equivalente en la plataforma
actual, como LIBPATH ,
o SHLIB_PATH )
como la ruta a las bibliotecas Oracle, por ejemplo
$ORACLE_HOME/lib o
/usr/lib/oracle/19/client/lib.
Esta variable no es necesaria si las bibliotecas
son localizadas por un mecanismo de búsqueda diferente, como
con ldconfig o
con LD_PRELOAD en lugar
de LD_LIBRARY_PATH .
|
NLS_LANG |
Es la variable principal para definir el
juego de caracteres y las informaciones de globalización
utilizadas por las bibliotecas Oracle.
|
ORA_SDTZ |
Define el desplazamiento horario a utilizar por las sesiones Oracle.
|
TNS_ADMIN |
Ruta al directorio que contiene los archivos de configuración
Oracle Net Services (tnsnames.ora
y sqlnet.ora). Innecesario si la cadena
de conexión utilizada por la función
oci_connect() está en formato de conexión fácil
como localhost/XE . También innecesario si los
archivos de configuración de red están en ubicaciones por defecto como /usr/lib/oracle/VERSION/client/lib/network/admin, $ORACLE_HOME/network/admin
o /etc.
|
Existen otras variables de entorno Oracle menos frecuentemente
utilizadas, como
TWO_TASK
,
ORA_TZFILE
, así como las diversas variables
de globalización como
NLS*
y
ORA_NLS_*
.
En caso de problemas
El problema más común durante la instalación de OCI8 es
haber configurado incorrectamente el juego de variables de entorno.
Es un problema típico cuando se recibe un mensaje
de error al utilizar las funciones
oci_connect() o oci_pconnect().
El error puede ser un error puramente PHP como Llamada a la función
no definida oci_connect(), un error Oracle como ORA-12705 o
incluso un fallo brusco de Apache. Verifíquese el contenido de los archivos de
registro de Apache durante su inicio y refiérase a las secciones
anteriores para resolver el problema.
Mientras que los errores de red como ORA-12154 o ORA-12514 indican
un problema de nombramiento de red o un problema de configuración,
muy a menudo, la causa principal es que el entorno PHP no está
correctamente definido y que las bibliotecas Oracle son incapaces
de encontrar el archivo de configuración tnsnames.ora.
En Windows, tener varias versiones de Oracle en la misma
máquina puede hacer que la instalación falle fácilmente a menos que se
asegure de que PHP no está utilizando únicamente la versión correcta de Oracle.
Una utilidad que permite examinar las bibliotecas buscadas
y cargadas puede ayudar a resolver este tipo
de problema, especialmente en Windows.
Nota:
Si el servidor Web no arranca o falla al inicio
Verifíquese que Apache está enlazado con la biblioteca pthread:
Si la biblioteca libpthread no está listada, reinstálese Apache:
Tenga en cuenta que en sistemas como UnixWare, la biblioteca se llama
libthread en lugar de libpthread. PHP y Apache deben ser configurados
con EXTRA_LIBS=-lthread.