Instalando PDO Oracle e OCI8 do PHP7 no Ubuntu/Mint (Oracle 11.2)



“Edit – No final deste post, adicionei um vídeo mostrando o passo a passo deste tutorial”

Se você está tendo ou já teve dor de cabeça para instalar os módulos OCI8 e PDO para Oracle como eu, aqui vai um pequeno passo a passo do que funcionou para mim, espero que lhe ajude também.

Os passos neste tutorial requer que o usúario tenha privilégios de usuário root.

Caso você já tenha o Apache e o PHP instalados, verifique apenas se falta em seu computador algum pacote do PHP que foram instalados no passo 2.

Passo 1 – Instale o Apache .

Abra o terminal e digite os seguintes comandos:

sudo apt-get update
sudo apt-get install apache2

Com o Apache instalado, teste no browser/navegador se o serviço está rodando através da url https:/localhost

Passo 2 – Instale o PHP.

sudo apt-get install php7.0 php7.0-xml php-xml php-common php7.0-cli php7.0-common php7.0-fpm php7.0-json php7.0-opcache php7.0-readline libapache2-mod-php7.0 php-pear php7.0-dev

Passo 3- Baixe os seguintes pacotes do Oracle Client, faça o download dos pacotes *.rpm   > https://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

 oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm

oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm

oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

Passo 4 – Instale o alien, para converter pacotes .rpm (família redhat) para .deb (família debian).

$ sudo apt-get install alien

Passo 5 – Converta os arquivos .rpm e instale.

$ sudo alien -i oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
$ sudo alien -i oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
$ sudo alien -i oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

Passo  6 – Instale a biblioteca libaio1.

$ sudo apt-get install libaio1

Passo 7- Crie o arquivo oracle.conf na pasta /etc/ld.so.conf.d/ com o caminho da lib do oracle client, e após criar o arquivo recarregue as configurações de ldconfig, atenção para mudar o caminho se o seu sistema(PC/SO) não for 64bits(client64).

$ sudo nano /etc/ld.so.conf.d/oracle.conf

cole o caminho da lib no meu caso foi: /usr/lib/oracle/11.2/client64/lib salve o arquivo com as teclas CTRL+x

Recarregue as configurações:

$ sudo ldconfig

Passo 8 – Exporte a variável ORACLE_HOME

$ export ORACLE_HOME=/usr/lib/oracle/11.2/client64/

Passo 9 – Baixe o código fonte da lib oci8,  extraia  o conteúdo do arquivo baixado, compile e instale o mesmo.

$ pecl download OCI8
-------
downloading oci8-2.1.4.tgz ...
Starting to download oci8-2.1.4.tgz (191,992 bytes)
.........................................done: 191,992 bytes
File /home/me/oci8-2.1.4.tgz downloaded

oci8-2.1.4.tgz foi o arquivo baixado
--------
$ tar zxvf oci8-2.1.4.tgz (extraindo o arquivo baixado)
$ cd oci8-2.1.4/
$ phpize
$ ./configure --with-oci8=instantclient,/usr/lib/oracle/11.2/client64/lib #(atente para o caminho da lib do oracle)
$ sudo make install

Após o termino da compilação e instalação ele irá informar que o arquivo foi gerado e o caminho do mesmo, no meu caso foi:

----------------------------------------------------------------------
Libraries have been installed in:
 /home/me/Downloads/oci8-2.1.4/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
 - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
 during execution
 - add LIBDIR to the 'LD_RUN_PATH' environment variable
 during linking
 - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
 - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
Installing shared extensions: /usr/lib/php/20151012/

Passo 10 – Habilite a lib gerada no PHP:

Crie o arquivo o oci8.ini na pasta de módulos disponíveis do php, no meu caso foi na pasta  /etc/php/7.0/mods-available/ , e após isso crie um link simbólico para ativar a lib, no meu caso foi na pasta  /etc/php/7.0/apache2/conf.d

$ sudo nano /etc/php/7.0/mods-available/oci8.ini

cole o nome da lib :
extension=oci8.so
salve o arquivo com as teclas CTRL+x

$ cd /etc/php/7.0/apache2/conf.d
$ sudo ln -s /etc/php/7.0/mods-available/oci8.ini oci8.ini

Passo 11 – Verifique a versão do seu PHP:

$ php -v

————————
PHP 7.0.8-0ubuntu0.16.04.1 (cli) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.8-0ubuntu0.16.04.1, Copyright (c) 1999-2017, by Zend Technologies
———————-

Baixe o código fonte do PHP diretamente do site github, baixe a versão correspondente a versão instalada no seu PC, no meu caso foi a versão 7.0.8 (https://github.com/php/php-src/tree/PHP-7.0.8), caso essa não seja a sua versão selecione a versão correspondente no menu de branchs e faça o download do zip, esse passo é para conseguimos a versão correta da lib PDO_OCI.

Passo 12 – Através da linha de comando extraia o arquivo baixado,  compile e instale a lib.

$ unzip php-src-PHP-7.0.8.zip #(extraindo o arquivo baixado)
$ cd php-src-PHP-7.0.8/ext/pdo_oci/

(em versões mais novas[7.0.25 por exemplo], esse bloco abaixo não é necessário, você pode ir direto para o comando -> phpize)

$ nano config.m4

edite o arquivo config.m4, para adicionar a versão do 11.2
do oracle, localize a variável SUPPORTED_LIB_VERS (mais ou menos na linha 5)
e adicione o número da versão 11.2 na lista de versões, também
procure por case $PDO_OCI_VERSION (mais ou menos na linha 134)
e adicione | 11.2 | na lista de versões, salve o arquivo com as
teclas CTRL+X.

$ phpize
$ ./configure --with-pdo-oci=instantclient,/usr,11.2 #(atente para a versão da lib do oracle)
$ sudo make install

Passo 13 – Habilite a lib pdo_oci gerada no PHP:

Crie o arquivo pdo_oci.ini na pasta de modúlos disponíveis do php e o link simbólico igualmente ao passo 10, mundando apenas o nome da lib:

$ sudo nano /etc/php/7.0/mods-available/pdo_oci.ini

cole o nome da lib :
extension=pdo_oci.so
salve o arquivo com as teclas CTRL+x

$ cd /etc/php/7.0/apache2/conf.d
$ sudo ln -s /etc/php/7.0/mods-available/pdo_oci.ini pdo_oci.ini

Passo 14 – Reinicie o apache

$ sudo service apache2 restart

Passo 15 – Habilite a vizualização de informações do php, criando o arquivo info.php com a função phpinfo() na pasta html do apache; e acesse no browser/navegador a url https://localhost/info.php e procure pelas libs oci8 e pdo_oci para saber se as mesmas estão ativas

$ sudo nano /var/www/html/info.php

cole o seguinte conteudo:
<?php
phpinfo();
?>
salve o arquivo com as teclas CTRL+x

Ao acessar a página procure pelos seguintes trechos, se estiverem como as imagens abaixo, o seu PHP está funcionando corretamente com as libs oci8 e pdo_oci. Após a verificação apague o arquivo info.php criado.

Tela de informações do php informando que o oci8 está ativo.
Tela de informações do php informando que o pdo_oci está ativo.

 

 

“Vídeo demostrando o passo a passo deste tutorial”

7 Replies to “Instalando PDO Oracle e OCI8 do PHP7 no Ubuntu/Mint (Oracle 11.2)”

  1. Amigo, estou com o ubuntu 16.04 e criando um ambiente de dev que precisa conectar ao oracle, segui o teu tutorial, até o oci foi tranquilo, porem o pdo_oci não esta rolando, tem alguma ideia do que poderia ser? Segui o tutorial e nao tive nenhum erro.

    1. Opa William, desculpe a demora em responder, passei uns dias sem acessar o blog. Você habilitou a a função phpinfo(); para checar quais libs estavam ativas? Também pode checar se habilitou a lib do pdo_oci com o arquivo pdo_oci.ini..

  2. Eu instalei o client 12.2, porém preciso instalar o 11g, qual o procedimento para desinstalar o 12.2 e instalar novamente o 11g?

    1. Consegui realizar o downgrade:

      1 – Desinstalei os pacotes:

      sudo apt-get remove oracle-instantclient12.2-sqlplus
      sudo apt-get remove oracle-instantclient12.2-devel
      sudo apt-get remove oracle-instantclient12.2-basic

      2 – Baixei os pacotes 11.2 do site da oracle e instalei novamente como ensina o tutorial acima
      3 – Apontei a lib da correta no arquivo oracle.conf
      No arquivo:
      sudo vim /etc/ld.so.conf.d/oracle.conf

      Mudei de:
      /usr/lib/oracle/12.2/client64/lib
      Para:
      /usr/lib/oracle/11.2/client64/lib

      4 – Recarreguei as configurações
      sudo ldconfig

      5 – Apontei a variável ORACLE_HOME para a versão correta

      export ORACLE_HOME=/usr/lib/oracle/11.2/client64/

      6 – Realizei a compilação do oci8 novamente com o caminho da versão 11.2

      $ tar zxvf oci8-2.1.4.tgz (extraindo o arquivo baixado)
      $ cd oci8-2.1.4/
      $ phpize
      $ ./configure –with-oci8=instantclient,/usr/lib/oracle/11.2/client64/lib #(atente para o caminho da lib do oracle)
      $ sudo make install

      7 – Reinicie o servidor

Leave a Reply

Your email address will not be published. Required fields are marked *

*

code