Continuando a saga, o meu cliente precisou que o sistema dele funcionasse com pdo_oci. Isso fez com que fosse necessário instalar algumas coisas e compilar o módulo do php.
Tudo o aqui feito precisa de ser super-usuário, então a primeira coisa é fazer login como root:
sudo su -
Fiz uma pasta para que fique todo junto e seja fácil copiar as coisas para outro local depois.
cd mkdir dev cd dev
Obviamente que a primeira coisa a fazer é atualizar o sistema:
apt update -y && sudo apt upgrade -y
Baixei os seguintes arquivos de https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html:
oracle-instantclient-devel-10.2.0.5-1.x86_64.rpm oracle-instantclient-basic-10.2.0.5-1.x86_64.rpm
Como o servidor é um Ubuntu (filho do Debian) precisamos a ferramenta alien
para poder transformar esses arquivos .rpm
em .deb
apt install alien -y
E converti os arquivos usando o alien
alien -d oracle-instantclient-basic-10.2.0.5-1.x86_64.rpm sudo alien -d oracle-instantclient-devel-10.2.0.5-1.x86_64.rpm
Isso gerou dois arquivos que passei a instalar usando o dpkg
dpkg -i oracle-instantclient-basic_10.2.0.5-2_amd64.deb dpkg -i oracle-instantclient-devel_10.2.0.5-2_amd64.deb
Com isso, agora temos uma pasta /usr/share/oracle/10.2.0.5/client64/
com a livraria do cliente e uma outra pasta /usr/include/oracle/10.2.0.5/client64/
com os arquivos necessários para a compilação.
Publiquei o ambiente:
export ORACLE_HOME=/usr/share/oracle/10.2.0.5/client64/ export LD_LIBRARY_PATH=$ORACLE_HOME/lib ldconfig
Sendo que nossa versão de PHP é a 5.6.40 puxei o código fonte dela:
wget http://php.net/get/php-5.6.40.tar.bz2/from/a/mirror -O php-5.6.40.tar.bz2
Expandi o arquivo:
tar xjf php-5.6.40.tar.bz2
E preparei a pasta do módulo para compilá-lo:
cd php-5.6.40/ext/pdo_oci/ phpize
Isso produz a seguinte saída (que pode variar dependendo da versão de PHP que você está usando)
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
No arquivo Makefile.global, adicionei a seguinte linha logo após INSTALL e INSTALL_DATA:
EXTRA_INCLUDES = -I/usr/include/oracle/10.2.0.5/client64
Alterei o `config.m4` adicionando 10.2 à lista das livrarias suportadas
SUPPORTED_LIB_VERS="9.0 10.1 10.2 11.1 12.1"
Alterei o script configure
para reconhecer nosso php_pdo_driver.h
deixando ele da seguinte forma:
if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then
pdo_cv_inc_path=$abs_srcdir/ext
elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then
pdo_cv_inc_path=$abs_srcdir/ext
elif test -f $prefix/include/php/ext/pdo/php_pdo_driver.h; then
pdo_cv_inc_path=$prefix/include/php/ext
elif test -f /root/dev/php-5.6.40/ext/pdo/php_pdo_driver.h; then
pdo_cv_inc_path=/root/dev/php-5.6.40/ext/pdo/
fi
E (usando o cliente que foi instalado na sessão anterior) rodei o configure assim:
./configure --with-pdo-oci=instantclient,/opt/oracle_instantclient,10.2
Logo (e não tendo dado erros) compilei o módulo:
make
E procedi a instalar a extensão:
make install
Com o que ele nos devolve o local onde a extensão foi instalada:
Installing shared extensions: /usr/lib/php/20131226/
Criei um arquivo para indicar ao php que desejo carregar a extensão compilada.
vi /etc/php/5.6/mods-available/pdo_oci.ini
Com o seguinte conteúdo:
; priority=20 extension=pdo_oci.so
E habilitei o módulo:
phpenmod pdo_oci
Finalmente reiniciei o apache:
apachectl restart
E comprovei se a extensão foi instalada e habilitada:
php -i | grep -i pdo
Devolvendo-me o seguinte resultado em tela:
PDO PDO support => enabled PDO drivers => oci PDO_OCI PDO Driver for OCI 8 and later => enabled PWD => /root/dev/php-5.6.40/ext/pdo_oci _SERVER["PWD"] => /root/dev/php-5.6.40/ext/pdo_oci
Evidentemente que essa extensão depende de ter a pasta /root/dev/php-5.6.40/ext/pdo_oci e caso seja necessário é possível instalar em outra pasta. Mas isso já não é o caso.