Pesquisar neste blog

quarta-feira, 29 de outubro de 2008

Adicionando suporte ao Oracle no PHP

Distros: CentOS 4 ou 5
Versão do PHP: 4 ou 5

Para instalar o suporte a base de dados Oracle no PHP devemos ter os seguintes pacotes baixados e instalados:


http://www.oracle.com/technology/pub/notes/technote_php_instant.html

libaio-0.3.96-7.i386.rpm
oracle-instantclient-basic-10.2.0.3-1.i386.rpm
oracle-instantclient-devel-10.2.0.3-1.i386.rpm
oracle-xe-client-10.2.0.1-1.0.i386.rpm

após instalados, devemos setar as varáveis de ambiente no arquivo de configuração do apache:

vim /etc/httpd/conf/httpd.conf

SetEnv ORACLE_HOME /usr/lib/oracle/xe/app/oracle/product/10.2.0/client
SetEnv LD_LIBRARY_PATH /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib

E também no arquivo /etc/init.d/httpd colocar o seguinte conteúdo:

LD_LIBRARY_PATH=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client
NLS_LANG="BRAZILIAN PORTUGUESE_BRAZIL.WE8ISO8859P15"

export LD_LIBRARY_PATH
export ORACLE_HOME
export NLS_LANG

Antes de começar a compilar o source do php devemos adicionar o camonho das libs do oracle client no arquivo /etc/ld.so.conf o conteúdo abaixo:

/usr/lib
/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib

e depois executar o comando ldconfig

Tudo certo agora mão na massa:

Para o que o suporte ao oracle seja ativado devemos baixar a versão estável do fonte do php. Após termos baixado devemos instalá-la:

rpm -ivh /root/programas/php-4.4.7-1.src.rpm

Entrar na pasta SPECS
#cd /usr/src/redhat/SPECS/
editar o arquivo php-4.4.7.spec
adicionar a seguinte linha no arquivo

--with-oci8=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client \
%{?_with_oci8:--with-oci8=shared} \
--with-oci8-instant-client \

após adicionar, salvar e sair.

Execute o comando abaixo para criar o pacote:
# rpmbuild -ba php-4.4.7.spec

e é só aguardar a criação dos novos pacotes com o suporte ao Oracle.

Após o termino os pacotes estarão disponíveis em:
/usr/src/redhat/RPMS/i386

-rw-r--r-- 1 root root 1530032 Out 6 07:51 php-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 5701838 Out 6 07:51 php-debuginfo-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 2068194 Out 6 07:51 php-devel-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 34047 Out 6 07:51 php-domxml-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 83103 Out 6 07:51 php-gd-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 34133 Out 6 07:51 php-imap-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 17639 Out 6 07:51 php-ldap-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 928404 Out 6 07:51 php-mbstring-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 666709 Out 6 07:51 php-mysql-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 22988 Out 6 07:51 php-ncurses-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 24672 Out 6 07:51 php-odbc-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 555029 Out 6 07:51 php-pear-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 34644 Out 6 07:51 php-pgsql-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 11169 Out 6 07:51 php-snmp-4.4.7-1.i386.rpm
-rw-r--r-- 1 root root 34974 Out 6 07:51 php-xmlrpc-4.4.7-1.i386.rpm

Se você já está com o php instalado basta atualizar a versão utilizando o comando:

# rpm -Uvh php-* --force --nodeps

depois de atualizado basta restartar o serviço do servidor apache e testar;

Para ter certeza de que o módulo do oracle foi adicionado ao php basta executarmos o seguinte comando:

[root@www1 i386]# php -m
[PHP Modules]
bcmath
bz2
calendar
ctype
curl
dba
dbx
dio
domxml
exif
ftp
gd
gettext
gmp
iconv
imap
ldap
mbstring
mime_magic
mssql
mysql
ncurses
oci8
odbc
openssl
overload
pcre
pgsql
posix
pspell
session
shmop
snmp
sockets
standard
sysvsem
sysvshm
tokenizer
wddx
xml
xmlrpc
yp
zlib

[Zend Modules]

Verifique se o módulo OCI8 está na listagem dos módulos acima.


Para você não perder mais tempo tendo que testar se realemente o PHP está conectando no Oracle ai vai um exemplo de código que faz a conexão com uma base de dados:



putenv("ORACLE_SID=ORACLE");
putenv("ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client");

$ORACLE_SID = getenv("ORACLE_SID");
$ORACLE_HOME = getenv("ORACLE_HOME");

echo $ORACLE_SID."
";

echo $ORACLE_HOME."
";


$db ="(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = 10.1.1.111)
(PORT = 1521)
)
(CONNECT_DATA = (SID = ORACLE))
)";

$c=ociplogon("manager","manager",$db);

if (!$c) {
echo "Problema na conexao: ".OCIError($c);
die();
} else { echo "Conexao oracle OK!!!";};
phpinfo();
?>


Os procedimentos acima foram testados com a versão 5 do php e funcionaram perfeitamente.

Um comentário:

Edificarte disse...

bom dia..

parabéns pelo blogger..
é sempre bom ter dicas do linux..
quando der visite o meu
deixe recados

abraços