Este artigo está disponível como um gist. Sinta-se livre para contribuir.
Agradecimentos especiais para:
Primeiro passo: Instalação do cliente Oracle
-
Faça o download do Instant Client em http://www.oracle.com/technetwork/indexes/downloads/index.html#database (você deve ter um usuário registrado no site da Oracle; o registro é gratuito). Você precisa dos arquivos
instantclient-basic-*-*.zip
einstantclient-sdk-*-*.zip
. -
Execute os seguintes comandos no seu terminal:
$ sudo su - $ mkdir -p /opt/oracle/instantclient $ cd /opt/oracle/instantclient
-
Copie os arquivos baixados em
/opt/oracle/instantclient
. -
Descompacte os arquivos executando estes comandos:
$ unzip instantclient-basic--.zip $ unzip instantclient-sdk--.zip
-
Mova todos o conteúdo de
/opt/oracle/instantclient/instantclient
para/opt/oracle/instantclient
:$ mv instantclient*/* ./ $ rmdir instantclient*/
-
Durante a compilação do código da extensão, alguns erros podem surgir quando forem resolvidas as dependências de algumas libraries. Para evitá-los, faça:
$ ln -s libclntsh.so.* libclntsh.so $ ln -s libocci.so.* libocci.so $ echo /opt/oracle/instantclient >> /etc/ld.so.conf $ ldconfig
-
Crie um diretório para seus arquivos de configuração de rede:
$ mkdir -p network/admin
-
Coloque os arquivos
sqlnet.ora
etnsnames.ora
em/opt/oracle/instantclient/network/admin
.
Agora você tem o kit básico para conexões e acesso à SDK para compilar extensões PHP com Oracle.
Segundo passo: Instalação da extensão PHP OCI8
-
Pegue todos os pacotes essenciais para baixar e compilar a partir de repositórios PEAR:
$ apt-get install --yes php5 php5-cli php5-dev php-db php-pear $ apt-get install --yes build-essential libaio1
-
Requisite a instalação do OCI8:
$ pecl install oci8
Digite
instantclient,/opt/oracle/instantclient
quando perguntado pelo local de instalação do Instant Client. -
Salve este texto em
/etc/php5/mods-available/oci8.ini
:extension=oci8.so
-
Ative a extensão:
$ php5enmod oci8
Agora você tem todas as funções PHP oci_*
disponíveis tanto via php-cli quanto via Apache.
Terceiro passo: Instalação da extensão PHP PDO/OCI
A biblioteca pdo_oci
está desatualizada, então sua instalação é mais "engenhosa".
-
Corrija alguns caminhos de arquivo:
$ cd /usr/include/ $ ln -s php5 php $ cd /opt/oracle/instantclient $ mkdir -p include/oracle/11.1/ $ cd include/oracle/11.1/ $ ln -s ../../../sdk/include client $ cd - $ mkdir -p lib/oracle/11.1/client $ cd lib/oracle/11.1/client $ ln -s ../../../../ lib $ cd -
-
Baixe a
pdo_oci
viapecl
:$ pecl channel-update pear.php.net $ mkdir -p /tmp/pear/download/ $ cd /tmp/pear/download/ $ pecl download pdo_oci
-
Extraia o código-fonte:
$ tar xvf PDO_OCI*.tgz $ cd PDO_OCI*
-
Crie um arquivo chamado
config.m4.patch
:*** config.m4 2005-09-24 17:23:24.000000000 -0600 --- /home/myuser/Desktop/PDO_OCI-1.0/config.m4 2009-07-07 17:32:14.000000000 -0600
*** 7,12 **** --- 7,14 ---- if test -s "$PDO_OCI_DIR/orainst/unix.rgs"; then PDO_OCI_VERSION=
grep '"ocommon"' $PDO_OCI_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4
test -z "$PDO_OCI_VERSION" && PDO_OCI_VERSION=7.3- elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.1; then
- PDO_OCI_VERSION=11.1 elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then PDO_OCI_VERSION=10.1 elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then
*** 119,124 **** --- 121,129 ---- 10.2) PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD) ;;
- 11.1)
- PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD)
- ;; *) AC_MSG_ERROR(Unsupported Oracle version! $PDO_OCI_VERSION) ;; #EOF
-
Aplique o patch:
$ patch --dry-run -i config.m4.patch && patch -i config.m4.patch && phpize
-
Substitua todas as referências de
function_entry
parazend_function_entry
empdo_oci.c
. -
Configure, compile e instale:
$ ORACLE_HOME=/opt/oracle/instantclient ./configure --with-pdo-oci=instantclient,/opt/oracle/instantclient,11.1 $ make && make test && make install && mv modules/pdo_oci.so /usr/lib/php5/*+lfs/
-
Salve este texto em
/etc/php5/mods-available/pdo_oci.ini
:extension=pdo_oci.so
-
Ative a extensão:
$ php5enmod pdo_oci
E agora você pode pegar uma xícara de café.