PHP + ORACLE ( eita parto )

Estava fazendo um trabalho em casa, referente a instalação de um PHP para conexão a um Oracle. Bom, o que parecia de cara uma coisa bem fácil ( seria na realidade instalar um CENT OS e compilar o PHP para suportar o Basic Client da Oracle ), virou uma loucura porque a maioria das documentações da internet não deixam os problemas claros ( pelo menos todos aqueles que enfrentei ).
Logicamente, usei mais de um documento como base. Na maioria das vezes, isto acontece porque o pessoal tem mania de escrever os tutoriais sem antes testar o que pode acontecer. Aí, vem os nerds como eu, e tem todos os problemas e colocam on line a melhora do artigo.
Tudo bem que o ideal seria o artigo original ser corrigido. Mas, na maioria das vezes, isto não acontece, até com a correlão sendo enviada ao autor.
Mas, vamos lá. Na realidade, usei três tutoriais bons e completos que estão disponíveis na internet :

E uma thread imensa sobre pessoas que tiveram bastante problemas com esta instalação. Ou seja, no fim, o que eu vi é que fazer o php funcionar para trabalhar com o Oracle é realmente um exercício bem grande de paciência.
Mas nada que algumas pesquisas no Pai Google, e muita paciência de ficar editando links para lá e para cá, não resolvam :-)
Primeiro ponto gritante neste tipo de instalação : recompilar. Não tinha outro jeito. Procurei na internet inteira e todos os fóruns eram claros. Recompilação tanto do PHP quanto do Apache.
Não que isto seja problema, mas é chato, principalmente porque me vieram na cabeça os famosos trocentos erros que eu iria tomar na cabeça. Mas como cliente é cliente, lá fui eu meter as caras nesta compilação.
O apache não me causou grandes problemas, onde joguei ele inteirinho para /etc/apache. Ou seja, config, binários e outras coisas mais foram para lá. O porque disto ? Sinceramente, não estava afim de ficar procurando a linha de comando mais bonita para resolver o problema, até porque não iria criar um rpm somente para isto. Detalhe : já levo em consideração que você baixou o apache e já o descompactou :

#./configure --prefix=/etc/apache --enable-module=so
# make
# make install

Com o apache instalado, vem a parte difícil, que era colocar o PHP puxando o módulo OCI8 do PHP, que é o que faz a conexão com o ORACLE. Bom, de acordo com os tutoriais, eu teria que baixar o ORACLE Instant Client, sendo que é aí que começaram os problemas com os tutoriais.
Bem, o tutorial em questão, que é o primeiro, manda baixar dois rpms, e eu os baixei. Instalei os ditos cujos e tentei fazer o configure ( NOTA : o configure que eu fiz, deve ser visualizado lá no final da página, que é o configure para o PHP a partir da versão 5.1.2 ) :

# ./configure --with-oci8=instantclient,/usr/lib/oracle/10.1.0.3/client/lib --prefix=/etc/apache/php --with-apxs2=/etc/apache/bin/apxs --enable-sigchild --with-config-file-path=/etc/apache/conf

E por sua vez, recebia este maravilhoso errinho :

checking PHP version... 5.2.3, ok
checking Oracle Instant Client directory... /usr/lib/oracle/10.1.0.3/client/lib
checking Oracle Instant Client SDK header directory... configure: error: Oracle Instant Client SDK header files not found

Procurei o erro no Google e nada me resolvia o problema. Bem, aí, eu resolvi seguir a dica de um dos caras na thread, que falava que havia baixado os .zip, ou seja, os binários sem ser rpm.
Descompactei tudo em um diretório chamado oracle dentro do diretório opt ( /opt/oracle ), e fiz novamente o configure.
De cara, já recebi outro erro :

checking Oracle Instant Client version... configure: error: Link from /opt/oracle/libclntsh.so to libclntsh.so.10.1 not found

Que facilmente foi resolvido com um link simbólico :

# cd /opt/oracle; ln -s libclntsh.so.10.1 libclntsh.so

Aí, fiz o configure abaixo :

# ./configure --with-oci8=instantclient,/opt/oracle --prefix=/etc/apache/php --with-apxs2=/etc/apache/bin/apxs --enable-sigchild --with-config-file-path=/etc/apache/conf

E, literalmente, se fez a luz. O PHP achou o cliente do Oracle e tudo ficou tranquilo.

checking PHP version... 5.2.3, ok
checking Oracle Instant Client directory... /opt/oracle
checking Oracle Instant Client SDK header directory... /opt/oracle/sdk/include
checking Oracle Instant Client version... 10.1

Aí, foi só correr para o diretório do apache, e efetuar as configurações no mesmo, que na realidade são necessárias para que o mesmo consiga rodar aplicações em PHP.

No /etc/apache/conf/httpd.conf devem ser adicionadas as linhas :

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Procurar pela linha DirectoryIndex e adicionar o index.php

DirectoryIndex index.html index.php

E pronto, seu Apache já está pronto para rodar. Mas há algumas coisinhas que devem ser feitas antes de inicializar o bichinho.

Para que ele ache as bibliotecas compartilhadas do Oracle Client, você deve colocar no diretório, /etc/ld.so.conf.d um arquivo chamado oracle, com o conteúdo /opt/oracle.
Após isto, digite ldconfig, para que o sistema leia todos os diretórios de biblioteca e as deixe disponíveis para quem precisar utilizá-las.

# /etc/apache/bin/apachectl start

Se não houver nenhuma mensagem de erro, seu apache está rodando sem problemas.

Lembre-se que agora, precisa criar um arquivo com o comando phpinfo(), para ver se está carregado o oci8 no seu php. Se tudo estiver ok, você vai ter uma parte do seu phpinfo() como a figura abaixo.

OCI8 no PHP

 
Com isto pronto, agora é passar para os testes de conexão com o banco via PHP. Na realidade, o cliente responsável pela máquina não testou, porque ele mandou um K62 que não inicou de jeito nenhum nem o RED HAT ENTERPRISE quanto o Cent Os ( Fiz a instalação na minha máquina pessoal em casa ).
Assim, quem testar e houver algum problema, vai postando aí que a gente vai resolvendo hehehehe