Do NOT call session_start() before you call error_reporting();
<?php
// does NOT work correctly
session_start();
error_reporting(NULL);
// does work
error_reporting(NULL);
session_start();
?>
Configurações em Execução
O comportamento dessas funções podem ser modificado pelas configurações do php.ini.
| Nome | Padrão | Modificável | Changelog |
|---|---|---|---|
| error_reporting | NULL | PHP_INI_ALL | |
| display_errors | "1" | PHP_INI_ALL | |
| display_startup_errors | "0" | PHP_INI_ALL | |
| log_errors | "0" | PHP_INI_ALL | |
| log_errors_max_len | "1024" | PHP_INI_ALL | Disponível desde PHP 4.3.0. |
| ignore_repeated_errors | "0" | PHP_INI_ALL | Disponível desde PHP 4.3.0. |
| ignore_repeated_source | "0" | PHP_INI_ALL | Disponível desde PHP 4.3.0. |
| report_memleaks | "1" | PHP_INI_ALL | Disponível desde PHP 4.3.0. |
| track_errors | "0" | PHP_INI_ALL | |
| html_errors | "1" | PHP_INI_ALL | |
| docref_root | "" | PHP_INI_ALL | Disponível desde PHP 4.3.0. |
| docref_ext | "" | PHP_INI_ALL | Disponível desde PHP 4.3.0. |
| error_prepend_string | NULL | PHP_INI_ALL | |
| error_append_string | NULL | PHP_INI_ALL | |
| error_log | NULL | PHP_INI_ALL |
Breve descrição das diretivas de configuração.
- error_reporting integer
-
Define o nível de erros para reportar. O parâmetro pode ser um inteiro ou uma constante. Os níveis de erros para reportar estão descritos em Constantes Pré-definidas, e no php.ini. Para definir em tempo de execução, use a função error_reporting(). Veja também a diretiva display_errors.
No PHP 4 e PHP 5 o valor padrão é E_ALL & ~E_NOTICE. Esta definição não mostra erros de nível E_NOTICE. Você deve querer mostra-los durante o desenvolvimento.
Nota:
Ativando E_NOTICE durante o desenvolvimento tem alguns beneficios. Para o proposito de eliminar erros: mensagens NOTICE irão avisar você sobre possiveis erros em seu código. Por exemplo, o uso de valores não definidos é avisado. É extremamente útil para encontrar erros de digitação e economisar tempo na correção de erros. As mensagens NOTICE irão avisar a você sobre mal estilo. Por exemplo, $arr[item] é melhor que seja escrito como $arr['item'] já que o PHP irá tratar "item" como uma constante. Se não for uma constante, o PHP irá considerar como uma string de índice para a matriz.
Nota:
No PHP 5 um novo nível de erro E_STRICT esta disponível. Já que E_STRICT não esta incluída em E_ALL você deve explicitamente ativar este nível de erro. Ativar E_STRICT durante o desenvolvimento tem alguns beneficios. Mensagem STRICT irão ajudar a você a utilizar o metodo mais recente de codificação, por exemplo, avisar você sobre funções obsoletas.
Nota: Constantes do PHP fora do PHP
Usar constantes PHP fora do PHP, como no httpd.conf, não terá sentido útiil assim nestes casos os valores integer são requeridos. E já que níveis de erros serão adicionados com o passar do tempo, o valor máximo (para E_ALL) irá provavelmente mudar. Assim no lugar de E_ALL considere usar um grande valor para cobrir todos os valores de agora assim como no futuro, um valor numérico como 2147483647.
- display_errors boolean
-
Isto determina quando os erros devem ser mostrados como parte da saída ou se devem ser escondidos do usuário.
O valor "stderr" é enviado para stderr ao invés de stdout. O valor é disponível no PHP 5.2.4. Em versões anteriores, esta diretiva era do tipo boolean.
Nota:
Isto serve para suportar o seu desenvolvimento e nunca deve ser usado em sistemas de produção (ex. sistemas conectados a internet).
Nota:
Mesmo podendo ser display_errors definido em tempo de execução (com ini_set()), ele não terá qualquer efeito se o script tiver erro fatal. Isto é porque a ação desejada em tempo de execução não é executada.
- display_startup_errors boolean
-
Mesmo quando display_errors esta em on, erros que aconteçam durante a inicialização do PHP não são mostrados. É fortemente recomendado manter display_startup_errors em off, exceto para procurar erros.
- log_errors boolean
-
Indica se as mensagens de erro do script devem ficar no log de erros do servidor ou em error_log. Esta opção depende do servidor.
Nota:
Você é fortemente avisado para usar o log de erros ao invés de mostra-los em web sites de produção.
- log_errors_max_len integer
-
Define o limite de tamanho da mensagem de erro para logar em bytes. Em error_log é adicionada informação sobre a fonte. O padrão é 1024 e 0 permite que não seja estabelecido nenhum limite. Este tamanho é aplicado aos erros logados, erros exibidos e também a $php_errormsg.
Quando um integer é utilizado, o valor é medido em bytes. A resumida notação, como descrito neste FAQ, pode também ser usada. - ignore_repeated_errors boolean
-
Não loga mensagens repetidas. Erros repetidos devem acontecer no mesmo arquivo na mesma linha enquanto ignore_repeated_source estiver em true.
- ignore_repeated_source boolean
-
Ignora a fonte da mensagem quando estiver ignorando mensagens repetidos. Quando esta definição ON não irá logar mensagens de erros repetidas de arquivos diferentes ou linhas diferentes.
- report_memleaks boolean
-
Se este parâmetro estiver em Off, quando acontecerem memory leaks não será mostrado (na saída ou no log). Isto só tem efeito numa compilação de debug, e se error_reporting incluir E_WARNING na lista de permitidos.
- track_errors boolean
-
Se ativado, a última mensagem de erro sempre estará disponível na variável $php_errormsg.
- html_errors boolean
-
Desativa as tags HTML nas mensagens de erro. O novo formato de mensagens de erro em HTML produz mensagens que podem ser clicadas e que direcionam o usuário para uma pagina descrevendo o erro ou a função que causou o erro. Estas referencias são afetadas por docref_root e docref_ext.
- docref_root string
-
O novo formato de mensagens de erro em HTML produz mensagens que podem ser clicadas e que direcionam o usuário para uma pagina descrevendo o erro ou a função que causou o erro. No caso de paginas de manual você pode baixar o manual na sua língua e definir esta diretiva para a sua cópia local. Se a sua cópia local do manual podur ser acessada por '/manual/' você pode simplesmente usar
docref_root=/manual/. Adicionalmente você deve definir docref_ext para ser igual a extensão da sua cópiadocref_ext=.html. É possível usar referencias externas. Por exemplo, você pode usardocref_root=http://manual/en/oudocref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F"A maior parte do tempo você deve querer que o valor de docref_root termine com uma barra '/'. Mas veja o segundo exemplo acima o qual não tem ou não necessita isso.
Nota:
Isto é para suportar o seu desenvolvimento já que torna mais fácil encontrar a descrição de uma função. Entretando não deve ser usado em sistemas de produção (ex. sistemas conectados na internet).
- docref_ext string
-
Veja docref_root.
Nota:
O valor de docref_ext deve começar com um ponto '.'.
- error_prepend_string string
-
String para mostrar antes de uma mensagem de erro.
- error_append_string string
-
String para mostrar após uma mensagem de erro.
- error_log string
-
O nome do arquivo onde os erros do script serão logados. O arquivo deve poder ser escrito pelo usuário do servidor web. Se o valor especial syslog é usado, os erros são enviados para o log do sistema. No Unix, isto indica syslog(3) e no Windows NT isto indica o log do evento. O log de sistema não é suportado no Windows 95. Veja também: syslog(). Se esta diretiva não for definida, os erros são enviados para o log de erros do SAPI. Por exemplo, é para o log de erros do Apache ou stderr para o CLI.
Note that if error_log is empty, errors/warnings/notices will be written to stderr (standard error stream), and this may be a problem if you is PHP in CLI.
<?php
# test.php
error_reporting(E_ALL);
ini_set('display_errors','On');
ini_set('error_log','my_file.log');
foreach(1 as $i);
ini_set('error_log','');
foreach(1 as $i);
ini_set('error_log','/dev/null'); #linux
foreach(1 as $i);
?>
php -f test.php
will output :
<?
Warning: Invalid argument supplied for foreach() in /test.php on line 7 # stdout
PHP Warning: Invalid argument supplied for foreach() in /test.php on line 10 # stderr
Warning: Invalid argument supplied for foreach() in /test.php on line 10 # stdout
Warning: Invalid argument supplied for foreach() in /test.php on line 13 # stdout
?>
Errors displayed in the stdout (standard output stream) car be catched with the output buffering functions (ob_start/ob_get_clean) while strerr cannot.
When using PHP with Apache mod_fcgid and "log_errors = On", PHP errors get logged into Apache ErrorLog file with severity "warn". No matter what severity the PHP error itself has, the severity in the Apache log is "warn".
To log PHP errors in the Apache log, use:
LogLevel warn
(or debug, info, notice)
In the Apache directive "php_value" you cannot omit the value and empty strings are not allowed:
#WRONG
php_value error_log
php_value error_log ""
In such cases, you can use "none". It is a special keyword for PHP that means "no value asigned":
#OK: empty string
php_value error_log none
If you want to avoid a fatal error when an undefined method call fails, you can add a simple Exception thrower like this:
<?php
class MyClass
{
// ...lots of your regular code, then:
public function __call($name, $args)
{
throw new Exception('Undefined method ' . $name . '() called');
}
}
?>
This means your top-level code can simple run inside a
<?php try { call_a_method(); } catch (Exception $e) { handle_exception($e); } ?>
block, and catch the errors that were fatal before.
There is a more simple and more correct solution - to use file .htaccess, where you can simply add the following lines:
php_value display_errors 1
php_value display_startup_errors 1
Using
<?php ini_set('display_errors', 1); ?>
at the top of your script will not catch any parse errors. A missing ")" or ";" will still lead to a blank page.
This is because the entire script is parsed before any of it is executed. If you are unable to change php.ini and set
display_errors On
then there is a possible solution suggested under error_reporting:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("file_with_errors.php");
?>
