Erros de Sintaxe em Scripts PHP

Artigo que explica como detectar erros de sintaxe em scripts PHP através do terminal de comandos.

Dica rápida

Para detectar erros de sintaxe no PHP, podemos executar o php, no terminal de comandos, passando o parâmetro "-l" (lint), conforme o exemplo:

$ php -l script.php

Isso é útil quando queremos apenas saber se há erros de sintaxe, mas não queremos executar, de fato, o script.

OK, mas muitos já conhecem este recurso. O problema é que, as vezes, executar este comando não retorna exatamente onde está o erro (diz apenas que há um erro). Nestes casos, você recebe a seguinte mensagem:

$ php -l script.php 
Errors parsing script.php

Recentemente descobri que essa mensagem simplificada é mostrada em função da configuração da diretiva error_reporting (no php.ini). Para que sejam mostrados detalhes sobre o erro de parser, você precisa configurar a diretiva error_reporting para, pelo menos, exibir erros do tipo E_PARSE.

Já falei sobre configurações do php.ini, e sobre máscaras binárias, que são necessárias para configurar a diretiva error_reporting, então leia estes artigos para mais detalhes.

Uma forma simples de evitar a mensagem simplificada é utilizar o parâmetro "-n", que diz ao PHP para não utilizar o php.ini ou o php-cli.ini. Então, o valor da diretiva error_reporting utilizado passa a ser o seu valor padrão, que é E_ALL & ~E_NOTICE (todos os erros, exceto notificações). Como o valor E_ALL inclui o valor E_PARSE (pela máscara binária), então ela mostra os erros de parser. Veja o exemplo:

$ php -ln script.php 

Parse error: syntax error, unexpected '=' in script.php on line 3
Errors parsing script.php

Esta é a forma simplificada, mas pode ser que você queira utilizar as configurações do php.ini, mas queira mudar apenas o valor da diretiva error_reporting. Neste caso, use o parâmetro "-d" para configurá-la manualmente:

$ php -d error_reporting=E_ALL -l script.php 
PHP Parse error:  syntax error, unexpected '=' in script.php on line 3

Parse error: syntax error, unexpected '=' in script.php on line 3
Errors parsing script.php

1 comentário