Instalar Oracle Instant Client com PHP 7 no Ubuntu Server 16.04

Eu encontrei um monte de tutoriais de como fazer a instalação, mas tive que recomeçar várias vezes até que encontrei uma forma de fazer funcionar. Está tudo resumido nos passos abaixo:

  • Instale Ubuntu Server como sempre

  • Vá até o website da Oracle e faça o download de “Instant Client for Linux X86–64" de
    http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

  • Registre-se com uma conta, aceite o License Agreement e faça o download dos arquivos RPM (não do zip!) para os pacotes: Instant Client Package Basic e Instant Client Package SDK

    image

  • Certifique de baixar a versão 12.1.0.1.0

    image

  • Transfira os pacotes RPM para o seu Ubuntu (provavelmente home/yourusername) e então instale o alien package converter e build tools para depois compilar a oci8 library.

    sudo apt-get install alien build-essential
    
  • Agora é preciso instalar todos os pacotes necessários para configurar o Apache e o PHP. Não é para instalar o pear porque vamos compilar manualmente a oci8 do PECL website.

    sudo apt-get install apache2 php7.0 php7.0-dev libaio1
    
  • Agora nós podemos instalar tudo. Primeiro precisamos converter os pacotes RPM para um formato compatível com o Ubuntu (deb) usando o alien. Abra o terminal no local onde estão os RPMse execute:

     sudo alien oracle-instantclient12.1-basic-12.1.0.1.0-1.x86_64.rpm
    

    Aguarde até aparecer: oracle-instantclient12.1-basic_12.1.0.1.0-2_amd64.deb generated

     sudo alien oracle-instantclient12.1-devel-12.1.0.1.0-1.x86_64.rpm
    

    Aguarde até aparecer: oracle-instantclient12.1-devel_12.1.0.1.0-2_amd64.deb generated

  • Para instalar os pacotes basta executar:

     dpkg -i oracle-instantclient12.1-basic_12.1.0.1.0-2_amd64.deb
     dpkg -i oracle-instantclient12.1-devel_12.1.0.1.0-2_amd64.deb
    
  • Agora, vá até o website PECL e pegue o ultimo pacote oci8:
    http://pecl.php.net/package/oci8

  • Faça o download o arquivo tgz e novamente mova para o seu home/yourusername do Ubuntu

  • Descomprima o oci8 e execute esses commandos

    tar -xzvf oci8-2.1.8.tgz
    cd oci8-2.1.8
    phpize
    ./configure -with-oci8=shared,instantclient,/usr/lib/oracle/12.1/client64/lib
    make
    sudo make install
    
  • Isso provavelmente vai instalar a oci8 library em:

    /usr/lib/php/20151012/
    
  • Agora precisamos editar estes arquivos…

    /etc/php/7.0/apache2/php.ini
    /etc/php/7.0/cli/php.ini
    
  • Ative a estensão:

    extension=/usr/lib/php/20151012/oci8.so
    
  • Salve cade php.ini

    IMPORTANTE

    A maioria dos tutoriais dizem para editar o /etc/environment e adicionar set path e oracle variables.
    ERRADO!!.

    Vocë precisa editar /etc/apache2/envvars e adicionar as seguintes linhas:

    export PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/administrador/oracle/oci8–2.1.8/modules:/usr/lib/oracle/12.1/client64:/usr/lib/oracle/12.1/client64/lib”
    export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib
    export ORACLE_HOME=/usr/lib/oracle/12.1/client64
    
  • Agora restart o server (apenas restarting o apache service pode não resolver)

    sudo shutdown -r now
    
  • Crie um test.php no /var/www/html com algo assim:

    <?php
    $dbstr =”(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ORACLEIP)(PORT=1521))(CONNECT_DATA=(SID=ORACLESID)))”;
    if($conn = oci_connect(‘YOURUSERNAME’,’YOURPASSWORD’, $dbstr)):
    print “CONNECTED OK!!”;
    else:
    print “WE HAVE A PROBLEM”;
    endif;
    ?>