De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Colocando Suporte a Oracle no PHP5 no Debian Etch

Colaboração: Conrado Pinto Rebessi

Data de Publicação: 26 de Março de 2007

Resolvi escrever este artigo quando li o artigo do Gabriel Fernandes em : http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=5328 e fiquei frustrado por não conseguir, então tentei de outras formas, consegui, e documento abaixo.

1. Instalar pacotes necessários:

  aptitude install dpkg-dev unzip build-essential flex bison libxml2 \
  libxml2-dev libz libz-dev libjpeg-dev libpng-dev libfreetype6-dev

2. baixar da Oracle os pacotes:

  instantclient-basic-linux32-10.2.0.3-20061115.zip
  instantclient-sdk-linux32-10.2.0.3-20061115.zip

Ou versões mais novas, todos disponíveis em: http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html

Lógico que um pequeno cadastro deve ser feito para acessar estes downloads...

3. Colocar os pacotes em /usr/local

  mv instantclient-basic-linux32-10.2.0.3-20061115.zip /usr/local
  mv instantclient-sdk-linux32-10.2.0.3-20061115.zip  /usr/local

4. Desempacotar os arquivos:

  cd /usr/local/
  unzip instantclient-basic-linux32-10.2.0.3-20061115.zip
  unzip instantclient-sdk-linux32-10.2.0.3-20061115.zip

5. Criar um link simbólico necessário

  ln -sf /usr/local/instantclient_10_2/libclntsh.so.10.1 \
  /usr/local/instantclient_10_2/libclntsh.so

6. Acrescentar ao /etc/ld.so.conf as linhas:

  /usr/local/instantclient_10_2/
  /usr/local/lib/

7. Remover o arquivo /etc/ld.so.cache e regerá-lo:

  rm /etc/ld.so.cache
  ldconfig

8. Para testar se funcionou:

  ldconfig -p | grep instantclient

9. Baixar os fontes do php5:

  cd /usr/src
  apt-get source php5

10. Preparar o php para a compilação do modulo:

  cd php5-5.2.0/ (este diretório pode variar com a versão do php)

11. Limpar o diretório de compilações anteriores

  make clean
  rm config.cache

12. Rodar o configure

  ./configure --with-oci8=shared,instantclient,/usr/local/instantclient_10_2

Se tudo der certo, no meio das dezenas de linhas que passarão na tela, deve haver uma, dentro da sessão Configuring extensions, como: ... Configuring extensions ... checking for Oracle (OCI8) support... yes, shared ...

Agora, o velho e bom:

  make

Faz o trabalho sujo de compilação. Num Dual Xeon, dual core com 2Gb de RAM este processo demorou pouco mais de 5 minutos, em outras máquinas pode demorar um pouquinho mais :-).

Terminado isto, o módulo deve estar disponível no subdiretório modules, devendo ser copiado para o diretório de módulos do php5

  cp modules/oci8.so /usr/lib/php5/20060613+lfs/

Acrescentamos então a seguinte linha ao /etc/php5/apache2/php.ini

  extension=oci8.so

Fazemos o Apache reler os arquivos de configuração

  /etc/init.d/apache2 reload

E podemos verificar se o php entende o módulo oci8, verificando o phpinfo(); Eu costumo criar um arquivo /var/www/apache2-default/teste.php, com o conteúdo:

  <?
  phpinfo();
  ?>

Acessar este arquivo em qualquer navegador:

  lynx http://<servidor>/apache2-default/teste.php

E procurar por uma parte mostrando o oci8 habilitado. No meu caso apareceu uma seção como a abaixo:

  oci8
  OCI8 Support    enabled
  Version         1.2.2
  Revision        $Revision: 1.269.2.16.2.25 $
  Active Persistent Connections   0
  Active Connections      0
  Oracle Instant Client Version   10.2
  Temporary Lob support   enabled
  Collections support     enabled
  
  Directive       Local Value     Master Value
  oci8.default_prefetch   10      10
  oci8.max_persistent     -1      -1
  oci8.old_oci_close_semantics    0       0
  oci8.persistent_timeout -1      -1
  oci8.ping_interval      60      60
  oci8.privileged_connect Off     Off
  oci8.statement_cache_size       20      20

Ótimo! O nosso php já tem suporte a Oracle. Como último teste, usamos uma pequena classe que faz um acesso básico ao banco de dados para testar a conexão. Criamos o arquivo /var/www/apache2-default/Class.ConectOci.php , com o conteúdo: OBS.: As informações de conexão, na última linha do script devem ser alteradas para refletir o ambiente usado. OBS2.: Esta classe foi graciosamente cedida pelo Daniel Lima para me auxiliar no artigo.

  <?php
  // +----------------------------------------------------------------------+
  // | File::Class.ConectOci.php                                            |
  // +----------------------------------------------------------------------+
  // | Copyright (c) 2005                                                   |
  // +----------------------------------------------------------------------+
  // | Author    : Daniel Antonio de Lima                                   |
  // | Data      : 08/08/2005                                               |
  // | Hora      : 11:25:00                                                 |
  // +----------------------------------------------------------------------+
  // | Version: 1.0.0                                                       |
  // +----------------------------------------------------------------------+
  // | Method:                                                              |
  // +----------------------------------------------------------------------+
  // Definições de Parametros do Sistema
  
  
  class MyConect{
  #conexão com banco de Dados
  
  var $host; #Qual é o servidor
  var $db;        #Qual é o banco de dados
  var $user;      #Qual é o usuário
  var $pass;      #Qual é o password
  
      function conect($host="",$db="",$user="",$pass=""){
             $this->socket = ociplogon($user,$pass,$host."/".$db);
             IF ( $this->socket == false ){
                //echo OCIError($this->socket)."<BR>";
                echo "Problemas";
                exit;
              } else {
                ECHO "Conectado com sucesso.!!!";
              }
      }
      function CloseDB(){
              return $this->CloseData = @oci_close($this->socket);
      }
  }
   $Conexao = new MyConect;
   $Conexao->conect("<servidor_oracle>","<base_de_dados>","<usuário>","<senha>");
  ?>

E o acessamos de qualquer navegador:

  lynx http://<servidor>/apache2-default/Class.ConectOci.php

Devemos então receber uma mensagem de sucesso:

  Conectado com sucesso.!!!

E correr pro abraço!

Conrado Pinto Rebessi conradopinto <arroba> yahoo <ponto> com <ponto>

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Conrado Pinto Rebessi