<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/oci8.setup.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'oci8.installation.php',
    1 => 'Instalaci&oacute;n',
    2 => 'Instalaci&oacute;n',
  ),
  'up' => 
  array (
    0 => 'oci8.setup.php',
    1 => 'Instalaci&oacute;n/Configuraci&oacute;n',
  ),
  'prev' => 
  array (
    0 => 'oci8.requirements.php',
    1 => 'Requerimientos',
  ),
  'next' => 
  array (
    0 => 'oci8.test.php',
    1 => 'Pruebas',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/oci8/configure.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="oci8.installation" class="section">
 <h2 class="title">Instalación</h2>

 <div class="section" id="oci8.configure">
  <h2 class="title">Configuración de PHP con OCI8</h2>
  <p class="para">
   Revísese la sección anterior sobre los
   <a href="oci8.requirements.php" class="link">Requisitos previos</a> antes de configurar OCI8.
  </p>
  <p class="para">
   Antes de iniciar el servidor web, OCI8, típicamente, requiere varias
   variables de entorno (ver a continuación) para localizar las bibliotecas,
   para apuntar a archivos de configuración, y para definir algunas
   propiedades básicas como el juego de caracteres utilizado por las bibliotecas
   OCI8. Las variables deben ser definidas <em>antes</em> del inicio
   de cualquier proceso PHP.
  </p>
  <p class="para">
   El binario PHP debe ser enlazado con las mismas (o versiones más recientes)
   de las bibliotecas Oracle para las cuales ha sido configurado. Por ejemplo,
   si se compila OCI8 con las bibliotecas Oracle 19, entonces PHP
   también debe ser desplegado y ejecutado con las bibliotecas Oracle 19.
   Las aplicaciones PHP pueden conectarse a otras versiones de bases
   de datos Oracle, sabiendo que Oracle contiene compatibilidades de versiones
   de los diferentes clientes - servidores.
  </p>
 </div>
 <div class="section">
  <h2 class="title">Instalación de OCI8 desde PECL utilizando el comando pecl</h2>
  <p class="para">
   La extensión OCI8 puede ser añadida a una instalación PHP existente utilizando
   el repositorio <a href="https://pecl.php.net/package/oci8" class="link external">&raquo;&nbsp;PECL</a>.
  </p>
  <p class="para">
   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      Si se encuentra detrás de un firewall, defínase el proxy de PEAR, por ejemplo:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
pear config-set http_proxy http://my-proxy.example.com:80/
</pre></div>
       </div>
      </div>
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Ejecútese:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
pecl install oci8
</pre></div>
       </div>
      </div>
     </p>
     <p class="para">
      Para PHP 7, utilícese <code class="literal">pecl install oci8-2.2.0</code>.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Cuando se le solicite, introdúzcase el valor de <code class="literal">$ORACLE_HOME</code> o
      <code class="literal">instantclient,/ruta/al/directorio/instant/client/lib</code>.
     </p>
     <p class="para">
      Nota: No se introduzcan nombres de variables como <code class="literal">$ORACLE_HOME</code>
      o <code class="literal">$HOME</code> ya que <code class="literal">pecl</code> no los
      expandirá. En su lugar, introdúzcase una ruta expandida, por ejemplo <code class="literal">/opt/oracle/product/19c/dbhome_1</code>
      o <code class="literal">instantclient,/Users/monnom/Descargas/instantclient_19_8</code>.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Si se obtiene un error <code class="literal">oci8_dtrace_gen.h: No existe el archivo o
      directorio</code>, esto significa que PHP ha sido compilado
      con <a href="features.dtrace.php" class="link">DTrace Dynamic Tracing</a> activado.
      Instálese utilizando el comando:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
$ export PHP_DTRACE=yes
$ pecl install oci8
</pre></div>
       </div>
      </div>
      </p>
   </li>
   <li class="listitem">
    <p class="para">
      Modifíquese el archivo <var class="filename">php.ini</var> y añádase la línea:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
extension=oci8.so
</pre></div>
       </div>
      </div>
     </p>
     <p class="para">
      Asegúrese de que la directiva <var class="filename">php.ini</var>
      <a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a> está
      definida en el directorio en el cual <var class="filename">oci8.so</var> ha sido instalado.
     </p>
    </li>
   </ul>
  </p>
 </div>
 <div class="section">
  <h2 class="title">Instalación de OCI8 desde PECL utilizando phpize</h2>
  <p class="para">
   Para instalar OCI8 en una instalación PHP existente cuando
   el comando <code class="literal">pecl</code> no está disponible, descárguese manualmente
   el paquete OCI8 <a href="https://pecl.php.net/package/oci8" class="link external">&raquo;&nbsp;PECL</a>,
   por ejemplo <var class="filename">oci8-3.0.0.tgz</var>.
  </p>
  <p class="para">
   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      Extraer el paquete:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
tar -zxf oci8-3.0.0.tgz
cd oci8-3.0.0
</pre></div>
       </div>
      </div>
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Preparar el paquete:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
phpize
</pre></div>
       </div>
      </div>
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Configurar el paquete utilizando <code class="literal">$ORACLE_HOME</code> o Instant Client.
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
./configure -with-oci8=shared,$ORACLE_HOME
</pre></div>
      </div>
      </div>
     </p>
    <p class="para">
     o
    </p>
    <p class="para">
     <div class="informalexample">
      <div class="example-contents screen">
<div class="cdata"><pre>
./configure -with-oci8=shared,instantclient,/ruta/a/instant/client/lib
</pre></div>
       </div>
      </div>
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Instalar el paquete:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
make install
</pre></div>
       </div>
      </div>
     </p>
     </li>
     <li class="listitem">
      <p class="para">
       Si se obtiene un error <code class="literal">oci8_dtrace_gen.h: No existe el archivo o
       directorio</code>, esto significa que PHP ha sido compilado
       con <a href="features.dtrace.php" class="link">DTrace Dynamic Tracing</a> activado.
       Ejecútese nuevamente los comandos <code class="literal">configure</code> y <code class="literal">make</code>
       después de haber definido esta variable de entorno:
      </p>
      <p class="para">
       <div class="informalexample">
        <div class="example-contents screen">
<div class="cdata"><pre>
$ export PHP_DTRACE=yes
</pre></div>
        </div>
       </div>
      </p>
     </li>
     <li class="listitem">
      <p class="para">
       Modifíquese el archivo <var class="filename">php.ini</var> y añádase la línea:
      </p>
      <p class="para">
       <div class="informalexample">
        <div class="example-contents screen">
<div class="cdata"><pre>
extension=oci8.so
</pre></div>
        </div>
      </div>
     </p>
     <p class="para">
      Asegúrese de que la directiva <var class="filename">php.ini</var>
      <a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a> está
      configurada en el directorio en el cual <var class="filename">oci8.so</var>
      ha sido instalado.
     </p>
    </li>
   </ul>
  </p>
  </div>
  <div class="section">
  <h2 class="title">Instalación de OCI8 como extensión compartida durante la compilación de PHP</h2>
  <p class="para">
   Si se compila PHP a partir del código fuente, la opción de configuración <code class="literal">shared</code> 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.
  </p>
  <p class="para">
   Configúrese OCI8 utilizando una de las siguientes opciones de configuración.
  </p>
  <p class="para">
   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      Si se utilizan las bibliotecas gratuitas <a href="https://www.oracle.com/database/technologies/instant-client.html" class="link external">&raquo;&nbsp;Oracle Instant
      Client</a>, hágase lo siguiente:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
./configure --with-oci8=shared,instantclient,/ruta/a/instant/client/lib
</pre></div>
       </div>
      </div>
     </p>
     <p class="para">
      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 <code class="literal">ln -s
      libclntsh.so.12.1 libclntsh.so</code>.
     </p>
     <p class="para">
      Si se utiliza una instalación basada en RPM de Oracle Instant Client,
      la línea de configuración se verá así:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
./configure --with-oci8=shared,instantclient,/usr/lib/oracle/&lt;version&gt;/client/lib
</pre></div>
       </div>
      </div>
     </p>
     <p class="para">
     Por ejemplo, <strong class="option configure">--with-oci8=shared,instantclient,/usr/lib/oracle/19.9/client/lib</strong>
    </p>
    </li>
    <li class="listitem">
     <p class="para">
      Si se utiliza una base de datos Oracle o una instalación completa de Oracle Client, procedase de la siguiente manera:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
./configure --with-oci8=shared,$ORACLE_HOME
</pre></div>
       </div>
      </div>
     </p>
     <p class="para">
      Asegúrese de que el usuario del servidor web (<code class="literal">nobody</code>, <code class="literal">www</code>) tiene acceso a las
      bibliotecas, a los archivos de inicialización
      y al archivo <var class="filename">tnsnames.ora</var> (si se utiliza) bajo
      el directorio <code class="literal">$ORACLE_HOME</code>. Con Oracle
      10<em>g</em>R2, puede que sea necesario ejecutar
      la utilidad <var class="filename">$ORACLE_HOME/install/changePerm.sh</var>
      para dar acceso al directorio.
    </p>
   </li>
  </ul>
 </p>
 <p class="para">
  Después de la configuración, sigase el procedimiento habitual de compilación de PHP,
  por ejemplo <em>make install</em>. La extensión compartida OCI8 <var class="filename">oci8.so</var>
  será creada. Puede ser necesario moverla manualmente al directorio de extensiones PHP, especificado por
  la opción <a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a> en su
  archivo <var class="filename">php.ini</var>.
 </p>
 <p class="para">
  Para completar la instalación de OCI8, modifíquese el archivo <var class="filename">php.ini</var> y añádase la línea:
 </p>
 <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
extension=oci8.so
</pre></div>
       </div>
</div>
 </p>
</div>
<div class="section">
 <h2 class="title">Instalación de OCI8 como extensión compilada estáticamente durante la compilación de PHP</h2>
 <p class="para">
  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.
 </p>
 <p class="para">
  <ul class="itemizedlist">
   <li class="listitem">
    <p class="para">
     Si se utiliza Oracle Instant Client, hágase lo siguiente:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
./configure --with-oci8=instantclient,/ruta/a/instant/client/lib
</pre></div>
       </div>
      </div>
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Si se utiliza una base de datos Oracle o una instalación completa del cliente Oracle, hágase lo siguiente:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
./configure --with-oci8=$ORACLE_HOME
</pre></div>
       </div>
      </div>
     </p>
    </li>
   </ul>
  </p>
  <p class="para">
   Después de la configuración, sigase el procedimiento habitual
   de construcción de PHP, por ejemplo <em>make install</em>. Después de una compilación
   exitosa, no es necesario añadir <var class="filename">oci8.so</var> a
   su <var class="filename">php.ini</var>. No se requiere ningún paso adicional de construcción.
  </p>
 </div>
 <div class="section">
  <h2 class="title">Instalación de OCI8 bajo Windows</h2>
  <p class="para">
   La biblioteca OCI8 puede ser añadida a una instalación existente de PHP utilizando
   las DLL del repositorio <a href="https://pecl.php.net/package/oci8" class="link external">&raquo;&nbsp;PECL</a> o las bibliotecas situadas en el directorio
   <code class="literal">ext</code> de su instalación PHP.
  </p>
  <p class="para">
   Con las bibliotecas Oracle 12<em>c</em> (o posteriores), descoméntese una de las
   siguientes líneas en su archivo <var class="filename">php.ini</var> <code class="literal">extension=php_oci8_12c.dll</code>
   o <code class="literal">extension=php_oci8_11g.dll</code>, o bien
   <code class="literal">extension=php_oci8.dll</code>. 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
   <a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a> está definida en la carpeta
   que contiene las extensiones DLL de PHP.
  </p>
  <p class="para">
   Si se utiliza el cliente Oracle Instant, defínase la variable
   de entorno <var class="envar">PATH</var> del sistema a la carpeta que contiene las
   bibliotecas Oracle.
  </p>
 </div>
 <div class="section">
  <h2 class="title">Definición del entorno Oracle</h2>
  <p class="para">
   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.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    No se definan las variables de entorno Oracle utilizando la función
    <span class="function"><a href="function.putenv.php" class="function">putenv()</a></span> 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 <span class="function"><a href="function.putenv.php" class="function">putenv()</a></span> 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 <em>antes</em> del inicio del
    servidor.
   </p>
  </p></blockquote>
  <p class="para">
   En los sistemas Red Hat Linux y sus variantes, debe exportarse
   las variables al final del archivo <var class="filename">/etc/sysconfig/httpd</var>.
   En otros sistemas que utilicen Apache 2, debe utilizarse el
   script <var class="filename">envvars</var> que se encontrará en el directorio
   <var class="filename">bin</var> de Apache. Otra opción consiste en utilizar
   la directiva <code class="literal">SetEnv</code> del archivo
   <var class="filename">httpd.conf</var>, pero esto puede no ser suficiente
   en algunos sistemas.
  </p>
  <p class="para">
   Para verificar si las variables de entorno han sido definidas
   correctamente, utilícese la función <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>
   y prestese atención a la sección <em>Environment</em>
   (y no a la sección <em>Apache Environment</em>);
   debe contener todas las variables definidas.
  </p>
  <p class="para">
   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.
   <table class="doctable table">
    <caption><strong>Variables de entorno Oracle comunes</strong></caption>
    
     <thead>
      <tr>
       <th>Nombre</th>
       <th>Propósito</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>ORACLE_HOME</td>
       <td>
        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.
       </td>
      </tr>

      <tr>
       <td>ORACLE_SID</td>
       <td>
        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 <span class="function"><a href="function.oci-connect.php" class="function">oci_connect()</a></span>.</td>
      </tr>

      <tr>
       <td>LD_LIBRARY_PATH</td>
       <td>
        Defínase esta variable (o su equivalente en la plataforma
        actual, como <code class="literal">LIBPATH</code>,
        o <code class="literal">SHLIB_PATH</code>)
        como la ruta a las bibliotecas Oracle, por ejemplo
        <var class="filename">$ORACLE_HOME/lib</var> o
        <var class="filename">/usr/lib/oracle/19/client/lib</var>.
        Esta variable no es necesaria si las bibliotecas
        son localizadas por un mecanismo de búsqueda diferente, como
        con <var class="filename">ldconfig</var> o
        con <code class="literal">LD_PRELOAD</code> en lugar
        de <code class="literal">LD_LIBRARY_PATH</code>.
       </td>
      </tr>

      <tr>
       <td>NLS_LANG</td>
       <td>
        Es la variable principal para definir el
        juego de caracteres y las informaciones de globalización
        utilizadas por las bibliotecas Oracle.
       </td>
      </tr>

      <tr>
       <td>ORA_SDTZ</td>
       <td>
        Define el desplazamiento horario a utilizar por las sesiones Oracle.
       </td>
      </tr>

      <tr>
       <td>TNS_ADMIN</td>
       <td>
        Ruta al directorio que contiene los archivos de configuración
        Oracle Net Services (<var class="filename">tnsnames.ora</var>
        y <var class="filename">sqlnet.ora</var>). Innecesario si la cadena
        de conexión utilizada por la función
        <span class="function"><a href="function.oci-connect.php" class="function">oci_connect()</a></span> está en formato de conexión fácil
        como <code class="literal">localhost/XE</code>. También innecesario si los
        archivos de configuración de red están en ubicaciones por defecto como <var class="filename">/usr/lib/oracle/VERSION/client/lib/network/admin</var>, <var class="filename">$ORACLE_HOME/network/admin</var>
        o <var class="filename">/etc</var>.
       </td>
      </tr>

     </tbody>
    
   </table>

   Existen otras variables de entorno Oracle menos frecuentemente
   utilizadas, como <code class="literal">TWO_TASK</code>,
   <code class="literal">ORA_TZFILE</code>, así como las diversas variables
   de globalización como <code class="literal">NLS*</code> y
   <code class="literal">ORA_NLS_*</code>.
  </p>
 </div>
 <div class="section">
  <h2 class="title">En caso de problemas</h2>
  <p class="para">
   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
   <span class="function"><a href="function.oci-connect.php" class="function">oci_connect()</a></span> o <span class="function"><a href="function.oci-pconnect.php" class="function">oci_pconnect()</a></span>.
   El error puede ser un error puramente PHP como <em>Llamada a la función
   no definida oci_connect()</em>, 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.
  </p>
  <p class="para">
   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 <var class="filename">tnsnames.ora</var>.
  </p>
  <p class="para">
   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.
  </p>
  <p class="para">
   Una utilidad que permite examinar las bibliotecas buscadas
   y cargadas puede ayudar a resolver este tipo
   de problema, especialmente en Windows.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <strong>Si el servidor Web no arranca o falla al inicio</strong><br />
   <p class="para">
    Verifíquese que Apache está enlazado con la biblioteca pthread:
   </p>
   <p class="para">
    <div class="informalexample">
     <div class="example-contents screen">
<div class="cdata"><pre>
# ldd /www/apache/bin/httpd
  libpthread.so.0 =&gt; /lib/libpthread.so.0 (0x4001c000)
  libm.so.6 =&gt; /lib/libm.so.6 (0x4002f000)
  libcrypt.so.1 =&gt; /lib/libcrypt.so.1 (0x4004c000)
  libdl.so.2 =&gt; /lib/libdl.so.2 (0x4007a000)
  libc.so.6 =&gt; /lib/libc.so.6 (0x4007e000)
  /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x40000000)
</pre></div>
     </div>
    </div>
   </p>
   <p class="para">
    Si la biblioteca libpthread no está listada, reinstálese Apache:
   </p>
   <p class="para">
    <div class="informalexample">
     <div class="example-contents screen">
<div class="cdata"><pre>
# cd /usr/src/apache_1.3.xx
# make clean
# LIBS=-lpthread ./config.status
# make
# make install
</pre></div>
     </div>
    </div>
   </p>
   <p class="para">
    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.
   </p>
  </p></blockquote>
 </div>

</div><?php manual_footer($setup); ?>