<?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 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'oci8.installation.php',
    1 => 'Instala&ccedil;&atilde;o',
    2 => 'Instala&ccedil;&atilde;o',
  ),
  'up' => 
  array (
    0 => 'oci8.setup.php',
    1 => 'Instala&ccedil;&atilde;o/Configura&ccedil;&atilde;o',
  ),
  'prev' => 
  array (
    0 => 'oci8.requirements.php',
    1 => 'Depend&ecirc;ncias',
  ),
  'next' => 
  array (
    0 => 'oci8.test.php',
    1 => 'Testando',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    '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">Instalação</h2>


 <div class="section" id="oci8.configure">
  <h2 class="title">Configurando o PHP com o OCI8</h2>
  <p class="para">
   Consulte a seção anterior
   sobre <a href="oci8.requirements.php" class="link">requisitos</a>
   antes de configurar o OCI8.
  </p>
  <p class="para">
   Antes de inicializar o servidor web, o OCI8 tipicamente requer várias
   variáveis de ambiente Oracle (veja abaixo) para localizar bibliotecas, apontar
   para arquivos de configuração e definir algumas propriedades básicas como o
   conjunto de caracteres utilizado pelas bibliotecas Oracle. As variáveis devem ser definidas
   <em>antes</em> que qualquer processo PHP inicie.
  </p>
  <p class="para">
   O binário PHP deve ter sido construído com a mesma versão principal, ou mais recente, das
   bilbiotecas Oracle com as quais foi configurado. Por exemplo, se o OCI8 estiver utilizando
   as bilbiotecas Oracle versão 19, o PHP também deve ser construído e executado
   com as bibliotecas Oracle 19. Aplicações PHP podem se conectar a outras
   versões de banco de dados Oracle, já que a Oracle tem compatibilidade cliente-servidor com versões diferentes.
  </p>
 </div>
 <div class="section">
  <h2 class="title">Instalando OCI8 com PECL Usando o Comando pecl</h2>
  <p class="para">
   A extensão OCI8 pode ser adicionada a uma instalação PHP existente usando
   o repositório <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">
      Se estiver por trás de um firewall, defina o proxy PEAR, por exemplo:
     </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">
      Execute
     </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 o PHP 7, use <code class="literal">pecl install oci8-2.2.0</code>
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Quando solicitado, entre o valor de <code class="literal">$ORACLE_HOME</code> ou
      <code class="literal">instantclient,/caminho/para/biblioteca/instant/client</code>.
     </p>
     <p class="para">
      Nota: Não use nomes de variáveis como <code class="literal">$ORACLE_HOME</code>
      ou <code class="literal">$HOME</code> porque o <code class="literal">pecl</code> não irá
      interpretá-las. Em vez disso, informa um caminho expandido, por
      exemplo <code class="literal">/opt/oracle/product/19c/dbhome_1</code>
      ou <code class="literal">instantclient,/Users/myname/Downloads/instantclient_19_8</code>.
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Se ocorrer um erro do tipo <code class="literal">oci8_dtrace_gen.h: No such file or
      directory</code>, significa que o PHP foi compilado com
      <a href="features.dtrace.php" class="link">Rastreamento Dinâmico DTrace</a> habilitado.
      Instale usando:
     </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">
      Edite o arquivo <var class="filename">php.ini</var> e adicione a linha:
     </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">
      Certifique-se que a diretiva
      <a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a> do <var class="filename">php.ini</var> esteja
      definida para o diretório onde o arquivo <var class="filename">oci8.so</var> tenha sido
      instalado.
     </p>
    </li>
   </ul>
  </p>
 </div>
 <div class="section">
  <h2 class="title">Instalando OCI8 com PECL Usando phpize</h2>
  <p class="para">
   Para instalar o OCI8 em uma instalação PHP existente quando
   o comando <code class="literal">pecl</code> não estiver disponível, baixe manualmente
   o pacote OCI8 <a href="https://pecl.php.net/package/oci8" class="link external">&raquo;&nbsp;PECL</a>,
   ex.: <var class="filename">oci8-3.0.0.tgz</var>.
  </p>
  <p class="para">
   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      Extraia o pacote:
     </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">
      Prepare o pacote:
     </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">
      Configure o pacote,
      usando <code class="literal">$ORACLE_HOME</code> ou 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">
      ou
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
./configure -with-oci8=shared,instantclient,/caminho/para/biblioteca/instant/client
</pre></div>
       </div>
      </div>
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Instale o pacote:
     </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">
      Se ocorrer um erro do tipo <code class="literal">oci8_dtrace_gen.h: No such file or
      directory</code>, significa que o PHP foi compilado
      com <a href="features.dtrace.php" class="link">Rastreamento Dinâmico DTrace</a> habilitado.
      Execute novamente os comandos <code class="literal">configure</code> e <code class="literal">make</code>
      depois de definir esta variável de ambiente:
     </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">
      Edite o arquivo <var class="filename">php.ini</var> e adicione a linha:
     </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">
      Certifique-se que a diretiva
      <a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a> do <var class="filename">php.ini</var> esteja
      definida para o diretório onde o arquivo <var class="filename">oci8.so</var> tenha sido
      instalado.
     </p>
    </li>
   </ul>
  </p>
 </div>
 <div class="section">
  <h2 class="title">Instalando o OCI8 como uma Extensão Compartilhada ao Compilar o PHP</h2>
  <p class="para">
   Se o PHP está sendo compilado a partir do código-fonte, a opção
   de configuração <code class="literal">shared</code> pode ser usada para construir o OCI8 como uma biblioteca
   compartilhada que pode ser carregada dinamicamente no PHP. Construir uma extensão compartilhada permite que
   o OCI8 seja atualizado facilmente sem impactar o restante do PHP.
  </p>
  <p class="para">
   Configure o OCI8 usando uma das opções de configuração a seguir.
  </p>
  <p class="para">
   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      Se as bibliotecas gratuitas do <a href="https://www.oracle.com/database/technologies/instant-client.html" class="link external">&raquo;&nbsp;Oracle Instant
      Client</a> estiverem sendo usadas, execute:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
./configure --with-oci8=shared,instantclient,/caminho/para/biblioteca/instant/client
</pre></div>
       </div>
      </div>
     </p>
     <p class="para">
      Se a Instant Client 12.2 (ou anterior) tiver sido instalada a partir de arquivos ZIP, certifique-se de
      criar as ligações simbólicas da biblioteca primeiro, por exemplo <code class="literal">ln -s
      libclntsh.so.12.1 libclntsh.so</code>.
     </p>
     <p class="para">
      Se estiver sendo usada uma instalação baseada em RPM da Oracle Instant Client, a
      linha de configuração será parecida com:
     </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 exemplo, <strong class="option configure">--with-oci8=shared,instantclient,/usr/lib/oracle/19.9/client/lib</strong>
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Se um banco de dados Oracle ou uma instalação completa do Oracle Client estiverem sendo usados, execute:
     </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">
      Certifique-se que o usuário sob o qual o servidor web esteja sendo executado
      (<code class="literal">nobody</code>, <code class="literal">www</code>) tenha acesso às
      bibliotecas, arquivos de inicialização
      e <var class="filename">tnsnames.ora</var> (se usado) no diretório
      <code class="literal">$ORACLE_HOME</code>. Com o Oracle
      10<em>g</em>R2, pode ser necessário executar
      o utilitário <var class="filename">$ORACLE_HOME/install/changePerm.sh</var>
      para conceder acesso ao diretório.
     </p>
    </li>
   </ul>
  </p>
  <p class="para">
   Depois da configuração, siga o procedimento usual de compilação do PHP,
   ex.: <em>make install</em>. A biblioteca da extensão
   compartilhada OCI8 <var class="filename">oci8.so</var> será criada. Pode ser necessário
   movê-la manualmente para o diretório das extensões PHP, especificado pela
   opção <a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a> no
   arquivo <var class="filename">php.ini</var>.
  </p>
  <p class="para">
   Para completar a instalação do OCI8, edite o <var class="filename">php.ini</var> e adicione a linha:
  </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">Instalando o OCI8 como um Extensão Compilada Estaticamente ao Compilar o PHP</h2>
  <p class="para">
   Se o PHP estiver sendo compilado a partir do código-fonte, pode-se configurá-lo para incluir
   o OCI8 como uma extensão estática usando uma das seguintes opções de configuração.
  </p>
  <p class="para">
   <ul class="itemizedlist">
    <li class="listitem">
     <p class="para">
      Se o Oracle Instant Client estiver sendo utilizado, execute:
     </p>
     <p class="para">
      <div class="informalexample">
       <div class="example-contents screen">
<div class="cdata"><pre>
./configure --with-oci8=instantclient,/caminho/para/biblioteca/instant/client
</pre></div>
       </div>
      </div>
     </p>
    </li>
    <li class="listitem">
     <p class="para">
      Se um banco de dados Oracle ou uma instalação completa do Oracle Client estiverem sendo usados, execute:
     </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">
   Depois da configuração, siga o procedimento usual de compilação do PHP,
   ex.: <em>make install</em>. Após a compilação
   bem sucedida, não é necessário incluir <var class="filename">oci8.so</var> ao
   <var class="filename">php.ini</var>. Nenhum passo adicional de compilação é requerido.
  </p>
 </div>
 <div class="section">
  <h2 class="title">Instalando o OCI8 no Windows</h2>
  <p class="para">
   A extensão OCI8 pode ser adicionada a uma instalação PHP existente usando as
   DLLs do repositório <a href="https://pecl.php.net/package/oci8" class="link external">&raquo;&nbsp;PECL</a> ou
   as bibliotecas no diretório <code class="literal">ext</code> da instalação do PHP.
  </p>
  <p class="para">
   Com as bibliotecas Oracle 12<em>c</em> (ou mais recentes), ative uma das
   linhas <code class="literal">extension=php_oci8_12c.dll</code>,
   <code class="literal">extension=php_oci8_11g.dll</code>
   ou <code class="literal">extension=php_oci8.dll</code> do <var class="filename">php.ini</var>. Apenas uma dessas DLLs pode ser
   habilitada de cada vez. DLLs com versões maiores podem conter mais
   funcionalidades. Pode ser que nem todas as DLLs estejas disponíveis para todas as versões do PHP.
   Certifique-se que <a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a> esteja definido
   para o diretório contendo as DLLs de extensões do PHP.
  </p>
  <p class="para">
   Se o Instant Client estiver sendo utilizado, defina a variável de ambiente do sistema <var class="envar">PATH</var>
   para o diretório da biblioteca Oracle.
  </p>
 </div>
 <div class="section">
  <h2 class="title">Configurando o Ambiente Oracle</h2>
  <p class="para">
   Antes de usar esta extensão, certifique-se que as variáveis de ambiente
   Oracle estajam adequadamente definidas para o usuário sob o qual o servidor web esteja sendo executado.
   Se o servidor web estiver sendo automaticamente iniciado quando o sistema é ligado, garanta que
   o ambiente em tempo de inicialização também esteja configurado corretamente.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="para">
    Não defina as variáveis de ambiente Oracle
    usando <span class="function"><a href="function.putenv.php" class="function">putenv()</a></span> em um script PHP porque as bilbiotecas
    Oracle podem estar carregadas e inicializadas antes que o script
    seja executado. Variáveis definidas com <span class="function"><a href="function.putenv.php" class="function">putenv()</a></span> podem causar
    conflitos, travamentos ou comportamento imprevisível. Algumas funções podem
    funcionar mas outras podem dar erros sutis. As variáveis devem ser
    definidas <em>antes</em> que o servidor web seja iniciado.
   </p>
  </p></blockquote>
  <p class="para">
   No Linux Red Hat e variantes, exporte as variáveis no final do arquivo
   <var class="filename">/etc/sysconfig/httpd</var>.  Outros sistemas com
   Apache 2 pode usar um script <var class="filename">envvars</var> no diretório
   <var class="filename">bin</var> do Apache. Uma terceira opção, a
   diretiva <code class="literal">SetEnv</code> do Apache
   no arquivo <var class="filename">httpd.conf</var>, pode funcionar em alguns sistemas mas
   é sabido que isto é insuficiente em outros.
  </p>
  <p class="para">
   Para verificar que as variáveis de ambiente estão definidas corretamente,
   use <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span> e verifique se
   a seção <em>Environment</em> (não a <em>Apache
   Environment</em>) contém as variáveis esperadas.
  </p>
  <p class="para">
   As variáveis que devem ser necessárias estão incluídas na tabela
   a seguir. Consulte a documentação da Oracle para mais informação sobre
   todas as variáveis disponíveis.
   <table class="doctable table">
    <caption><strong>Variáveis de Ambiente Oracle Comuns</strong></caption>
    
     <thead>
      <tr>
       <th>Nome</th>
       <th>Propósito</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>ORACLE_HOME</td>
       <td>Contém o diretório da instalação completa do Banco de dados
        Oracle. Não defina esta variável ao usar o Oracle Instant Client pois
        é desnecessário e pode causar problemas de instalação.</td>
      </tr>

      <tr>
       <td>ORACLE_SID</td>
       <td>Contém o nome do banco de dados na máquina local ao qual a
        ser conectado. Não há necessidade de definir esta variável se o
        Oracle Instant Client estiver sendo usado, ou passe sempre o parâmetro de conexão
        para a função <span class="function"><a href="function.oci-connect.php" class="function">oci_connect()</a></span>.</td>
      </tr>

      <tr>
       <td>LD_LIBRARY_PATH</td>
       <td>Defina esta variável (ou sua equivalente dependendo da plataforma, como
        <code class="literal">LIBPATH</code> ou <code class="literal">SHLIB_PATH</code>) para a
        localização das bibliotecas Oracle libraries, por
        exemplo <var class="filename">$ORACLE_HOME/lib</var>
        ou <var class="filename">/usr/lib/oracle/18.5/client/lib</var>. Note que com arquivos ZIP
        do Instant Client no Linux é mais confiável usar
        <var class="filename">ldconfig</var>, consulte as instruções de
        instalação do Instant Client. Com o Instant Client 19 (ou posterior) em arquivos
        RPM, <code class="literal">ldconfig</code> é executado automaticamente. Alguns usuários
        utilizam
        <code class="literal">LD_PRELOAD</code> no lugar
        de <code class="literal">LD_LIBRARY_PATH</code>.</td>
      </tr>

      <tr>
       <td>NLS_LANG</td>
       <td>Esta é a variável primária para definir o conjunto
        de caracteres e informação de globalização usados pelas bibliotecas
        Oracle.</td>
      </tr>

      <tr>
       <td>ORA_SDTZ</td>
       <td>Define o fuso horário da sessão Oracle.</td>
      </tr>

      <tr>
       <td>TNS_ADMIN</td>
       <td>Contém o diretório onde os arquivos de configuração do Oracle Net Services
        como <var class="filename">tnsnames.ora</var>
        e <var class="filename">sqlnet.ora</var> são mantidos. Não é necessária se
        a string de conexão da função <span class="function"><a href="function.oci-connect.php" class="function">oci_connect()</a></span> usa a sintexe de nomes
        Easy Connect como <code class="literal">localhost/XE</code>. Não é necessária se
        os arquivos de configuração de rede estiverem em uma das localizações padrões
        como
        <var class="filename">/usr/lib/oracle/VERSION/client/lib/network/admin</var>, <var class="filename">$ORACLE_HOME/network/admin</var>
        ou <var class="filename">/etc</var>.</td>
      </tr>

     </tbody>
    
   </table>

   Variáveis de ambiente utilizadas com menor frequência incluem
   <code class="literal">TWO_TASK</code>, <code class="literal">ORA_TZFILE</code> e as
   várias configuração de globalização Oracle
   como as variáveis <code class="literal">NLS*</code> e
   <code class="literal">ORA_NLS_*</code>.
  </p>
 </div>
 <div class="section">
  <h2 class="title">Solução de Problemas</h2>
  <p class="para">
   O problema mais comum na instalação do OCI8 é não ter o
   ambiente Oracle definido corretamente. Isto tipicamente aparece como um
   problema ao usar <span class="function"><a href="function.oci-connect.php" class="function">oci_connect()</a></span>
   ou <span class="function"><a href="function.oci-pconnect.php" class="function">oci_pconnect()</a></span>. O erro pode ser gerado pelo PHP,
   como <em>Call to undefined function
   oci_connect()</em>, ou pelo Oracle, como ORA-12705, ou até
   um travamento do Apache. Verifique se os arquivos de registro do Apache contêm erros de inicialização e
   consulte as seções acima para resolver este problema.
  </p>
  <p class="para">
   Enquanto erros de rede como ORA-12154 ou ORA-12514 indicam um problema de
   nome ou configuração de rede Oracle, a causa raiz pode ser o ambiente
   PHP incorretamente configurado e a incapacidade das bibliotecas Oracle
   em localizar o arquivo de configuração
   <var class="filename">tnsnames.ora</var>.
  </p>
  <p class="para">
   No Windows, múltiplas versões do Oracle instaladas em uma máquina
   pode facilmente gerar conflitos de bilbiotecas a menos que se tenha cuidado
   garantindo que o PHP usa apenas a versão correta do Oracle.
  </p>
  <p class="para">
   Um utilitário para examinar que bibliotecas estão sendo procuradas e carregadas
   pode ajudar a resolver problemas de bibliotecas ausentes ou conflitantes, particularmente no
   Windows.
  </p>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <strong>Se o servidor web não iniciar ou travar na
    inicialização</strong><br />
   <p class="para">
    Verifique que o Apache foi construído com a 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">
    Se libpthread não estiver listada, reinstale o 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">
    Note que em alguns sistemas como UnixWare, o nome é libthread
    em vez de libpthread. PHP e Apache devem ser configurados com
    EXTRA_LIBS=-lthread.
   </p>
  </p></blockquote>
 </div>


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