Antes de ir às questões técnicas da coisa, contarei sobre um caso que me ocorreu, caso no qual originou este artigo.
Se não estiver interessado no contexto geral, CLIQUE AQUI para ir diretamente para resolução da questão título do artigo.
Certa vez, na empresa para a qual presto serviços na maior parte do meu tempo, estávamos fazendo a migração dos sistemas em PHP do host Linux dedicado que tínhamos, para a estrutura da AWS.
Eu não estava gerindo o processo, pois tínhamos uma pessoa específica para cuidar dos assuntos internos de infra, mas eu estava acompanhando meio que de longe o processo de migração dos sistemas entre os servidores.
Lembro de iniciarmos as publicações dos ambientes em um dia a noite, e não foi tempo suficiente para deixar funcional o novo ambiente de produção, portanto deixamos para retomar os procedimentos no dia seguinte.
Eu estava focado no desenvolvimento de uma melhoria de um dos sistemas que estávamos fazendo a migração, então meu foco não estava na migração em si, mas via a pessoa responsável batendo cabeça o dia todo com a empresa prestadora de serviço que estava responsável pela configuração dos servidores na AWS.
Isso se prolongou até que a pessoa resolveu desabafar comigo. Ele me disse exatamente assim:
— Meu! O servidor está de pé e está configurado! Está funcionando certinho! O sistema foi publicado, mas não roda e nem dá pau, só fica nessa tela branca! O pessoal não sabe o que pode ser e eu também não faço ideia!
Quando ouvi ele dizer isso e me mostrou a tela do computador dele, na hora eu percebi qual era o problema. Respondi:
— Ah! Isso aí é o driver do postgre que não foi instalado! Fala para os caras instalarem o driver que resolve!
Pois bem, ele não levou fé no meu diagnóstico. Naquela época eu não era nenhum iniciante; já estava me tornando Sênior, mas ele tinha uns dez anos a mais de experiência com desenvolvimento web.
Esse dia passou, e mais um dia se passou. Até que no terceiro dia a tarde ele me chamou de canto e disse:
— Os caras resolveram o problema no servidor! Sabe o que era? Era o driver do postgre!
Confesso que, apesar da situção não ter sido bacana porque estávamos atrasados com o processo de publicação dos novos ambientes, fui tomado por um sentimento de êxtase. Eu ria bastante, e ele estava com cara de incrédulo.
Por fim, demos por finalizada a publicação dos ambientes e fizemos a propagação do novo apontamento de servidor nos domínios dos projetos.
Essa experiência me trouxe um ensinamento: Não importa muito quanto tempo a menos o outro tenha de experiência. A Tecnologia da Informação é muito vasta e bastante complexa. Nunca subestime o conhecimento alheio.
Essa reflexão me fez olhar os demais colegas mais novos de profissão com outros olhos, inclusive com mais respeito.
Eu e essa pessoa somos amigos até hoje. A propósito, se tem algo que esse mercado da Tecnologia da Informação me trouxe foram bons amigos.
Resolução
Agora chega de contar historinhas e vamos para a parte técnica da coisa!
Se você executar uma conexão de banco de dados com um banco PostgreSql em um ambiente PHP sem instalação do driver do banco de dados, você terá um Fatal error. Veja o resultado de um teste que efetuei no meu ambiente Xampp local:
Fatal error: Uncaught Error: Call to undefined function pg_connect() in C:\xampp\htdocs\tst\index.php:24 Stack trace: #0 {main} thrown in C:\xampp\htdocs\tst\index.php on line 24
Sim, isso é bem diferente de uma tela branca sem display de erros. Mas, se em algum lugar no script tiver algo como:
error_reporting(0); ini_set("display_errors", 0);
Simplesmente nada será apresentado na tela, pois essas linhas são responsáveis por suprimir quaisquer mensagens de erros provenientes do PHP.
E foi exatamente este o motivo pelo qual, naquela ocasião, o sistema não apresentou tela de erro. Nós costumamos suprimir os erros de script nos ambientes de produção para que o usuário não veja quaisquer possíveis erros que tenham passado despercebidos pela nossa equipe de desenvolvimento e de QA.