Diagnosticando problemas no PHP

9 de Março de 2010 · 2 Comentários

Cada vez mais, a linguagem PHP tem tomado espaço entre as aplicações mais conhecidas, não apenas entre desenvolvedores, mas também pelo seu uso nos CMS´s e sistemas mais populares (WordPress, Joomla, Drupal, etc - todos suportados no UOL HOST tanto em Linux como em Windows 2008).

Em muitos casos, nos deparamos com mensagens de erros do PHP, principalmente em eventos onde uma aplicação foi recém migrada. Estes erros auxiliam a executar ajustes e configurações específicas para que todos os recursos funcionem corretamente.

A plataforma de hospedagem do UOL HOST possui toda a flexibilidade de configurações para facilitar a vida de quem se depara com um erro em PHP. Abaixo, segue um roteiro simplificado para facilitar o diagnóstico.

Lembre que existem vários métodos para diagnóstico de erros e o roteiro abaixo é apenas um deles.

1 – Entenda como está configurado o PHP no servidor web.

Para isso, faça uma chamada a função phpinfo() ou, mais simples do que isso, basta consultar o arquivo phpinfo que disponibilizamos em nossas plataformas:

Linux – http://whl0003.whservidor.com/phpinfo.php
Windows 2008 – http://whw0014.dominiotemporario.com/phpinfo.php

2 – Verifique para qual versão do PHP sua aplicação foi desenvolvida.

Algumas aplicações mais antigas, desenvolvidas para PHP4 podem necessitar alguns ajustes em parâmetros do PHP5. Para saber melhor quais parâmetros devem ser alterados, acesse a FAQ: http://ajuda.uolhost.com.br/index.php?ind=&p=resposta&res=259

3 – Ative os recursos do PHP para que apresente mensagens de erros e que o auxiliará no isolamento do tipo de erro.

Insira em seus scripts:

<?
@ini_set("display_errors", 1);
@ini_set("log_errors", 1);
@ini_set("error_reporting", E_ALL);
?>

Você também pode alterar estes parâmetros globalmente, deste modo todos os arquivos de sua aplicação estarão contemplados.

Se sua hospedagem estiver em uma plataforma Linux, insira estas configurações em um arquivo .htaccess. Para saber mais sobre a alteração de parâmetros nas hospedagens Linux do UOL HOST, acesse a FAQ -> http://ajuda.uolhost.com.br/index.php?ind=&p=resposta&res=526

Caso você utilize uma hospedagem Windows, solicite junto ao Suporte a criação de um arquivo php.ini independente para a inclusão dos parâmetros.

•	display_errors = On
•	display_startup_errors = On
•	error_reporting = E_ALL
•	register_globals = Off
•	log_errors = On
•	track_errors = On

4 – Ao se deparar com uma mensagem de erro, consulte se não existe alguma referência em nosso sistema de ajuda, pois já mapeamos várias situações e documentamos como resolvê-las.

5 – Otimize sua aplicação, para isso siga os passos contidos na FAQ: http://ajuda.uolhost.com.br/index.php?ind=97&p=resposta&res=811

6 – Sempre analise as informações contidas no log de erros da hospedagem. Este log se encontra na pasta “/logs” de todas as hospedagens e deve ser acessado por FTP ou pelo painel de controle para sua segurança, já que ele pode conter informações sensíveis.

Por padrão, as plataformas de hospedagem Linux do UOL HOST possuem dois arquivos de logs. Um deles é o log de acesso e o outro é o log de erros.

Em plataformas Windows, você encontra os logs de acesso dentro da pasta Logs, para a análise de erros.

Muitas vezes, comportamentos atípicos e timeouts podem ser gerados por includes ou conexão a bases de dados externas. O log de erros facilita esta identificação.

7 – Tratamento de erros

Referente a controle de erros é importante conhecer as possíveis formas de isolar ou visualizar os erros que podem ocorrer nas aplicações.

Abaixo seguem alguns exemplos:

•	debug_backtrace — Gera um “backtrace“ (pilha de funções)
•	debug_print_backtrace — Mostra um backtrace
•	error_get_last — Obtém o último erro ocorrido
•	error_log — Envia uma mensagem de erro para um arquivo de log
•	error_reporting — Define quais erros serão reportados
•	set_error_handler — Função do usuário para manipular erros
•	trigger_error — Gera uma mensagem de erro em nível de usuário.

Referencia: http://www.php.net/manual/pt_BR/ref.errorfunc.php

Para utilização destes métodos não é necessário configurar adicionais em .htaccess.
Talvez a mais interessante seja a função “error_log”, onde você pode, por exemplo, gravar em um arquivo texto ou até mesmo enviar por email um possível erro que ocorre em uma simples consulta a banco de dados.

***** sobre a função error_log() *****

Veja um exemplo de utilização deste abaixo:

<?
// Envia uma notificação para o log do servidor
// se não pudermos conectar ao banco de dados.
$usuario = "usuário-do-banco-de-dados";
$senha = "senha-do-banco";
$servidor = "endereço-do-servidor-de-banco-de-dados";
$datahora = date("d.m.y - H:i:s");
if (@mysql_connect($servidor, $usuario, $senha) == FALSE) {
error_log("\nerro de conexão! ".$datahora, 0);
}
// Envia um email que ocorreu um erro
if (@mysql_connect($servidor, $usuario, $senha) == FALSE) {
error_log("erro de conexão! ".$datahora, 1, "seuemail@seudominio");
}
// salva um arquivo de log na pasta apontada “logdeerros”
if (@mysql_connect($servidor, $usuario, $senha) == FALSE) {
error_log("\nerro de conexão! ".$datahora, 3, "logdeerros/log.log");
}
?>

Parâmetros da função abaixo:

Tipo de logs de error_log()
“0″ mensagem é enviada para o sistema de log do PHP, usando o sistema de log do sistema operacional ou para um arquivo, dependendo do que estiver definido na diretiva error_log. Esta é a opção padrão.

“1″ mensagem é enviado para o endereço de email em destination . Este é o unico tipo de mensagem onde o quarto parâmetro extra_headers é usado.

“2″ Não é mais uma opção.

“3″ mensagem é adicionada ao arquivo destination . Uma nova linha não é adicionada automaticamente ao final da string message .

Compartilhe:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google

Tags: Desenvolvedores · Tecnologia · Webdesign

2 respostas até agora ↓

  • 1 Carlos // 26 de Março de 2010 às 10:03

    Excelente post, esclarecedor.

  • 2 Estevão // 7 de Abril de 2010 às 8:18

    Otimo… este post tem coisas que mesmo vc trabalhando com php, vc nunca usou no site e que com essas dicas, o trabalho do programador pode ficar um pouco “menos dificultoso” xD

    abraçus

Deixe um comentário