Checando a extensão PDO (PHP Data Objects) em Linux

Depois de quebrar a cabeça várias vezes para resolver problemas de conectividade com banco de dados, percebi que a extensão PDO não vem sempre disponibilizada por padrão na instalação do LAMP (Linux + Apache2 + Myql-server + PHP). Isso pode ser resolvido ou não, dependendo da situação… No Linux Antergos, derivado do Arch, é necessário editar o arquivo php.ini, no Pop_OS (System76, derivado do Debian/Ubuntu, ela simplesmente não está disponível (no arquivo php.ini não há extensões ‘.so’ para Linux, somente ‘.dll’ para Winodws :/ ).

Seguem algumas sugestões para checar isso:

Checando PDO

PDO é a sigla para PHP Data Objects. Trata-se de uma extensão do PHP para prover acesso a diferentes modelos de bancos de dados através de uma interface única de classes e métodos. (definição do site RUBSPHP).

A extensão é moderna e não funciona em versões PHP anteriores à 7.0.

PDO está se tornando padrão rapidamente, então e melhor usar desde o início, mas às vezes ela não vem habilitada por padrão, então é melhor checar agora

Crie um arquivo phpinfo.php na pasta raiz do /localhost com o código:

<?php
phpinfo();
?>

Cheque se as extensões PDO aparecem habilitadas aqui (procure com Ctrl+f : pdo).

 

Também vamos fazer um database para trabalhar e um script para checar se está tudo certo para começar a programar:

Abra o terminal. Conecte-se ao mysql-server com os comandos:

mysql -h localhost -u root -p

-h = host, nesse caso localhost, o servidor local.

-u = usuario, o padrão é root, se vc não tiver alterado na instalação.

-p = password do phpmyadmin, deixe em branco por motivo de privacidade, vai ser solicitada quando der enter, mas ficará invisivel, a senha é definida durante a instalação do phpmyadmin, use essa.

Crie uma database chamada ‘test’:

mysql> create database test;
resultado: Query OK, 1 row affected (0.00 sec)

Cheque o resultado com:
show databases;


(As instruções no prompt mysql terminam com ‘;’ se esquecer dele o interpretador vai entender que a instrução continua na próxima linha, é só teclar ‘;’ e dar enter para executar o comando.)

Deve aparecer uma lista de padrões e a test. Pode fechar o interpretador mysql com mysql> exit ou deixar aberto se ainda for manipular seu banco de dados via linha de comando.

Agora criamos um arquivo test.php com um script bem simples de teste na pasta do localhost: /var/html/www/  com o código:

<?php


#TESTE PDO EXTENSION
$conn = new PDO ('mysql:host=localhost;dbname=test','root','root');
if($conn){
print "PDO funcionando";
}else{
print "Alguma coisa está errada...";
}

?>

Usuario root e senha root, definidos na instalação de phpmyadmin, mude se tiver definido outros dados.

Execute pelo navegador: localhost/test.php. Se a extensão PDO foi reconhecida pelo sistema, vai ser exibida a mensagem “PDO funcionando”. Se não aparecer, ou receber uma tela em branco (opção show errors, desabilitada no php.ini) há um problema, cheque o final do artigo para algumas pistas. De qualquer forma, a extensão MYSQLI ainda está disponivel para conectar.

É interessante fazer algumas mudanças na instalação padrão do PHP editando o arquivo php.ini, por exemplo, habilitar a exibição de erros para ajudar a debugar programas e checar se a extensão PDO está disponivel.

Localização do arquivo de configuração do PHP:

/etc/php/7.1/cli/php.ini

Pode abrir com permissões de administrador com o editor padrão ‘nano’ como comando: sudo nano /etc/php/7.1/cli/php.ini

No arquivo .ini, toda linha que começar com ‘;’ está comentada, ou seja, não é lida pelo sistema. Se precisar que alguma linha seja interpretada, tem que apagar o ‘;’ e salvar.

Extensões que deveria decomentar (no caso de distros baseadas em Arch, elas aparecem comentadas e não são carregadas na inicialização):

;extension=mysql.so
;extension=mysqli.so
;extension=pdo_mysql.so

Descomentar (apagar o ‘;’) as extensões pdo com extensão .so para UNIX /LINUX (.dll são do Windows). Quando terminar de editar, saia do editor (os comandos dependem do editor, no Nano Ctrl+W salva e Ctrl+X fecha) e depois digitar o comando sudo systemctl restart apache2 para carregar as alterações.

NOTA: Algumas distros tem um bug esquisito que não inclui essas extensões no sistema, no caso da PoP_OS (System76), só estavam disponíveis com extensão .dll que não servem no Linux, impossibilitando o uso da extensão PDO, nesse caso instale outra distro ou use a extensão MYSQLI. Esse problema é descrito meio obscuramente como “enviroment issues“, problemas de ambiente específico, e provavelmente ninguém vai se dar ao trabalho de debugar…

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *