php_oracle

Revision 1 as of 2010-04-26 12:24:03

Clear message

PHP + ORACLE

Esta Wiki tem por objetivo auxiliar na configuração do php com suporte ao oracle

Introdução

Esta página foi concebida em 23/04/2010 com o intuito de ajudar outros administradores/usuários de sistema linux a configurar o php com suporte ao banco de dados oracle.

A idéia dessa primeira contribuição partiu de um artigo que escrevi para o vivaolinux nesta data, porém como o artigo ainda não foi publicado deixarei para postar o link do artigo em outra oportunidade.

Ambiente, Dependências e Downloads

Versões

Para este tutorial foi utilizado as seguintes versões:

  • sistema operacional utilizado = ubuntu 9.10 x86_64 (server)
  • versão do apache - 2.2.12
  • versão do php - PHP 5.2.10-2
  • versão do oracle - 10g (aqui é o servidor de banco de dados que já está em produção)
  • versão do instant Client - 11.2.0.1.0 6 - versão do oci8 - 1.4.1

Dependências:

  • php5-dev
  • php5-cli
  • php-pear
  • libaio1
  • O programa unzip (para descompactar os arquivos *.zip)

Downloads:

Para compilarmos o PHP 5 com acesso ao Oracle, primeiramente devemos baixar o "Instant Client Package - Basic" e também o "Instant Client Package - SDK" do site da oracle e baixar o oci8.

Então para baixar os arquivos do site da oracle primeiramente é necessário ser cadastrado na oracle. O cadastro é gratuito. Vou pular a parte do cadastro por entender que essa parte não gera muitas dificuldades.

Então o link para baixar os arquivos é esse:

  • http://www.oracle.com/technology/software/tech/oci/instantclient/index.html 

Precisamos escolher a plataforma conforme o nosso ambiente.

Os links diretos para os arquivos que utilizei nesse arquigo são:

  • http://download.oracle.com/otn/linux/instantclient/112010/oracle-instantclient11.2-sdk-11.2.0.1.0-1.x86_64.zip
    http://download.oracle.com/otn/linux/instantclient/112010/oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.zip 

Caso seu linux seja para plataforma 32 bits os links diretos são:

  • http://download.oracle.com/otn/linux/instantclient/112010/instantclient-basic-linux32-11.2.0.1.zip
    http://download.oracle.com/otn/linux/instantclient/112010/instantclient-sdk-linux32-11.2.0.1.zip 

Para baixar o oci8 acesse o site:

  • http://pecl.php.net/package/oci8

O link direto para a versão que foi utilizada nesse artigo:

  • http://pecl.php.net/get/oci8-1.4.1.tgz 

Instalação

Aqui no meu ambiente eu já tinha o apache e o php5 instalados, mas suponhamos que os mesmos ainda não estejam instalados. Execute os comandos abaixo

  • # sudo aptitude update
    # sudo aptitude install apache2 php5-common php5 php5-dev libapache2-mod-php5 php5-cli build-essential php-pear libaio1 unzip 

OBS.: Caso em seu ambiente também já tenha o php5 e o apache instalado você poderá executar o comando acima suprimindo os pacotes que já estejam instalados, ou executar da forma como está. O máximo que irá acontecer é o aptitude atualizar o pacote caso o mesmo esteja desatualizado.

Eu baixei os arquivos na seguinte pasta: /home/cpd/Oracle

Então vamos seguir os seguintes passos:

Entrar na pasta que foi feito o download dos arquivos;

  • $ cd /home/cpd/Oracle 

Com o comando abaixo já assumi o console com o usuário root:

  • $ sudo su 

OBS.: daqui para frente todos os comandos foram executados como root, caso prefira pode executar os comandos com o usuário comum não se esquecendo de adicionar no começo de cada comando a palavra "sudo "

Extrair os arquivos instantclient:

  • # unzip oracle-instantclient11.2-sdk-11.2.0.1.0-1.x86_64.zip
    # unzip oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.zip 

Será criada uma pasta em /home/cpd/Oracle com o nome instantclient_11_2.

O pacote Basic extrai os arquivos em /home/cpd/Oracle/instantclient_11_2 e o SDK em /home/cpd/Oracle/instantclient_11_2/sdk .

O nome das pastas pode variar de acordo com a versão do instantclient baixada.

Entrar na pasta extraída e criar os links simbólicos:

  • # cd instantclient_11_2/
    # ln -s libclntsh.so.10.1 libclntsh.so
    # ln -s libocci.so.10.1 libocci.so 

Voltar para a pasta anterior e extrarir o oci8

  • # cd ..
    # tar -xvf oci8-1.4.1.tar 

Será criada uma pasta oci8-1.4.1 e um arquivo xml. Entrar na pasta criada e rodar um phpize

  • # cd oci8-1.4.1/
    # phpize 

Setar a variável ORACLE_HOME com o caminho da pasta que foi extraído o instantclient

  • # export ORACLE_HOME=/home/cpd/Oracle/instantclient_11_2 

Ainda dentro da pasta do oci8 executar o comando:

  • # ./configure --with-oci8=share,instantclient,/home/cpd/Oracle/instantclient_11_2 

Após o comando acima aparecerá um prompt solicitando a pasta que contém as libs do oracle, digite:

  • instantclient,/home/cpd/Oracle/instantclient_11_2 

Lembrando que o "instantclient," é obrigatório e o restante é a pasta que você extraiu o instantclient

Feito isso executar os comandos:

  • # make
    # make install 

Se tudo ocorrer certo executar:

  • # echo extension=oci8.so >> /etc/php5/apache2/php.ini
    # echo extension=oci8.so >> /etc/php5/cli/php.ini 

Restartar o apache:

  • # /etc/init.d/apache2 restart 

Testando

Para testar se o php já está com suporte ao oracle siga os passos adiante:

Criar um arquivo chamado info.php em /var/www com o seguinte conteúdo:

  • <?
    phpinfo();
    ?> 

Usando um browser (de preferência um livre como o firefox) entre no servidor e acesse a página info.php:

  • http://ip-do-servidor/info.php

Deve aparecer uma página com várias informações, deve ter um campo chamado oci8 e dentre as informações listadas uma delas será OCI8 Support enabled. Algo parecido com a tabela abaixo:

oci8

OCI8 Support

enabled

Version

1.4.1

Revision

$Revision: 293235 $

Active Persistent Connections

0

Active Connections

0

Oracle Instant Client Version

11.2

Temporary Lob support

enabled

Collections support

enabled

Directive

Local Value

Master Value

oci8.connection_class

no value

no value

oci8.default_prefetch

100

100

oci8.events

Off

Off

oci8.max_persistent

-1

-1

oci8.old_oci_close_semantics

Off

Off

oci8.persistent_timeout

-1

-1

oci8.ping_interval

60

60

oci8.privileged_connect

Off

Off

oci8.statement_cache_size

20

20

Erros conhecidos

Se após o comando make apresentar o seguinte erro:

  • -L/home/cpd/Oracle/antigos/instantclient -lclntsh -Wl,-rpath -Wl,/home/cpd/Oracle/antigos/instantclient -Wl,-soname -Wl,oci8.so -o .libs/oci8.so
    /usr/bin/ld: skipping incompatible /home/cpd/Oracle/antigos/instantclient/libclntsh.so when searching for -lclntsh
    /usr/bin/ld: cannot find -lclntsh
    collect2: ld returned 1 exit status
    make: *** [oci8.la] Error 1 

Verifique a versão do ubuntu com o comando:

  • # uname -a
    Linux intrateste 2.6.31-14-server #48-Ubuntu SMP Fri Oct 16 15:07:34 UTC 2009 x86_64 GNU/Linux 

E verifique se a versão instalada é de 32 bits ou 64 bits e se combina com a versão do instant client da oracle baixada.

Referências Bibliográficas

Para criar essa wiki me utilizei das seguintes referências:

Créditos

Autor:

Daniel Rodrigues

Data:

23/04/2010