@ 451F: Acho que as palavras-chave aqui são "padrões rígidos". Não sei sobre versões anteriores, mas com o PHP 5.4.0, é recomendável definir o relatório de erros E_ALL & ~E_DEPRECATED & ~E_STRICTpara produção. Observe que eles sugerem que você desative padrões rígidos.
Fake Code Monkey Rashid
Também localizar seu arquivo php.ini e copiá-lo para / usr / local / php5 / lib /
yadhu
Respostas:
185
Deseja desativar o relatório de erros ou apenas impedir que o usuário o veja? Geralmente, é uma boa ideia registrar erros, mesmo em um site de produção.
# in your PHP code:
ini_set('display_errors','0');# don't show any errors...
error_reporting(E_ALL | E_STRICT);# ...but do log them
Eles serão registrados no log do sistema padrão ou usarão a error_logdiretiva para especificar exatamente para onde você deseja que os erros ocorram.
Apenas para declarar explicitamente o óbvio: é claro que você também pode configurá-los em seu php.iniarquivo, por exemplo, se você não pode modificar o código PHP.
sschuberth
1
Registrar erros estritos na produção também é uma prática ruim, no entanto. Como você preencherá seus logs com avisos que provavelmente não importam, causando um ou mais dos seguintes problemas: serverAdmin perderá / ignorará erros e o diretório de log consumirá todo o espaço do servidor em algum momento.
Lance
4
Isso não funciona para mim - tinha que usar E_ALL & ~ E_STRICT de Falso Code Monkey Rashid comentário de resposta abaixo
besimple
1
como isso funciona ao lado do que encontrei no meu php.ini log_errors = On Vs ini_set ('display_errors', '0'); É o último jogo vencido?
desembarcou
@ nate quando você postar algum código, diga-nos onde podemos colá-lo. Não sei onde colocá-lo: em php.iniou .htaccessem algum lugar do meu código PHP.
Даниил Пронин
89
Sem erros.
error_reporting(0);
ou simplesmente não é rigoroso
error_reporting(E_ALL ^ E_STRICT);
e se você quiser exibir todos os erros novamente, use
+1: acredito que isso ^só é bom para omitir um tipo de erro. Se você deseja desativar outros tipos, use o E_ALL & ~E_DEPRECATED & ~E_STRICTformato. Ou talvez o (E_ALL & ~(E_DEPRECATED | E_STRICT))formato.
Fake Code Monkey Rashid
10
Nota: E_STRICT só faz parte do E_ALL desde o php 5.4 #
Fred Haslam
@FakeCodeMonkeyRashid Gostaria de saber por que isso é? provavelmente porque então a ordem de evaulação é importante?
codeling
Suprimir o relatório de erros STRICT no PHP <5.4 ini_set('error_reporting', E_ALL&~E_STRICT); Suprimir o relatório de erros STRICT no PHP> = 5.4ini_set('error_reporting', E_ALL^E_STRICT);
Mel_T 24/02/16
Quero ressaltar que usar ^("xor") em vez de & ~("e não") é uma má ideia ! ^depende da suposição de que, por exemplo, E_STRICT faça parte de E_ALL e sempre fará parte dele. Isso é ruim porque E_ALL mudou no passado (E_STRICT não era passado, mas agora é a partir do PHP 5.4). Se a suposição falhar um dia, ^ela não será apenas quebrada, mas na verdade fará o oposto do que ela deveria fazer: ela habilitará o E_STRICT devido ao modo como o XOR ( ^) funciona. & ~no entanto, sempre desativa E_STRICT, não importa o valor atual de E_ALL. Portanto, & ~deve ser usado.
Jay
31
Todas as soluções acima estão corretas. Mas, quando estamos falando de um aplicativo PHP normal, eles precisam ser incluídos em todas as páginas, o que é necessário. Uma maneira de resolver isso é através .htaccessda pasta raiz. Apenas para ocultar os erros. [Coloque uma das seguintes linhas no arquivo]
php_flag display_errors off
Ou
php_value display_errors 0
Em seguida, para definir o relatório de erros
php_value error_reporting 30719
Se você está se perguntando como foi o valor 30719, E_ALL (32767), E_STRICT (2048) são na verdade constantes que mantêm o valor numérico e ( 32767 - 2048 = 30719)
Muito obrigado - isso fez o truque (solução .htaccess) no PHP 5.4.7 - nada mais - nem mesmo modificou o .ini - estava fazendo o truque.
Eu usei php_admin_value error_reportingpara isso funcionar (na configuração do vhost).
Lou Terrailloune 28/08
@Seza, Corrigido Corrigido.
Starx 28/08/13
1
não é sobre a página, este método é preferido porque a maioria dos erros E_STRICT são tempo de compilação e não pode ser substituído em tempo de execução
AbiusX
2
Oi, apenas para facilitar, para aqueles que estão usando o wamp, você pode desativar os erros clicando em php> php settings >> display errors. Se estiver marcado, desmarque-o.
Hemang Rami
9
O valor padrão do sinalizador error_reporting é E_ALL & ~ E_NOTICE, se não estiver definido no php.ini. Mas em algumas instalações (principalmente as que se destinam a ambientes de desenvolvimento), o E_ALL | E_STRICT definido como valor deste sinalizador (este é o valor recomendado durante o desenvolvimento ). Em alguns casos, especialmente quando você deseja executar alguns projetos de código aberto, que foram desenvolvidos antes da era do PHP 5.3 e ainda não atualizados com as melhores práticas definidas pelo PHP 5.3, em seu ambiente de desenvolvimento, você provavelmente encontrará algumas mensagens como você está recebendo. A melhor maneira de lidar com essa situação é definir apenas E_ALL como o valor do sinalizador error_reporting , emphp.ini ou em código (provavelmente em um controlador frontal como index.php em web-root da seguinte maneira:
Se você trabalha no ambiente wordpress, o Wordpress define o nível de erro no arquivo wp-includes / load.php na função wp_debug_mode(). Portanto, você precisa alterar o nível APÓS que essa função tenha sido chamada (em um arquivo não registrado no git, portanto, isso é apenas desenvolvimento), ou modificar diretamente a error_reporting()chamada
Isso é realmente útil, eu tinha o modo de depuração ativado para uma instalação do Wordpress e não percebi que fazia isso. Obrigado pela informação!
Tim
2
Não vi uma resposta limpa e adequada para software pronto para produção, então aqui vai:
/*
* Get current error_reporting value,
* so that we don't lose preferences set in php.ini and .htaccess
* and accidently reenable message types disabled in those.
*
* If you want to disable e.g. E_STRICT on a global level,
* use php.ini (or .htaccess for folder-level)
*/
$old_error_reporting = error_reporting();/*
* Disable E_STRICT on top of current error_reporting.
*
* Note: do NOT use ^ for disabling error message types,
* as ^ will re-ENABLE the message type if it happens to be disabled already!
*/
error_reporting($old_error_reporting &~E_STRICT);// code that should not emit E_STRICT messages goes here/*
* Optional, depending on if/what code comes after.
* Restore old settings.
*/
error_reporting($old_error_reporting);
E_ALL & ~E_DEPRECATED & ~E_STRICT
para produção. Observe que eles sugerem que você desative padrões rígidos.Respostas:
Deseja desativar o relatório de erros ou apenas impedir que o usuário o veja? Geralmente, é uma boa ideia registrar erros, mesmo em um site de produção.
Eles serão registrados no log do sistema padrão ou usarão a
error_log
diretiva para especificar exatamente para onde você deseja que os erros ocorram.fonte
php.ini
arquivo, por exemplo, se você não pode modificar o código PHP.php.ini
ou.htaccess
em algum lugar do meu código PHP.Sem erros.
error_reporting(0);
ou simplesmente não é rigoroso
error_reporting(E_ALL ^ E_STRICT);
e se você quiser exibir todos os erros novamente, use
error_reporting(-1);
fonte
^
só é bom para omitir um tipo de erro. Se você deseja desativar outros tipos, use oE_ALL & ~E_DEPRECATED & ~E_STRICT
formato. Ou talvez o(E_ALL & ~(E_DEPRECATED | E_STRICT))
formato.ini_set('error_reporting', E_ALL&~E_STRICT);
Suprimir o relatório de erros STRICT no PHP> = 5.4ini_set('error_reporting', E_ALL^E_STRICT);
^
("xor") em vez de& ~
("e não") é uma má ideia !^
depende da suposição de que, por exemplo, E_STRICT faça parte de E_ALL e sempre fará parte dele. Isso é ruim porque E_ALL mudou no passado (E_STRICT não era passado, mas agora é a partir do PHP 5.4). Se a suposição falhar um dia,^
ela não será apenas quebrada, mas na verdade fará o oposto do que ela deveria fazer: ela habilitará o E_STRICT devido ao modo como o XOR (^
) funciona.& ~
no entanto, sempre desativa E_STRICT, não importa o valor atual de E_ALL. Portanto,& ~
deve ser usado.Todas as soluções acima estão corretas. Mas, quando estamos falando de um aplicativo PHP normal, eles precisam ser incluídos em todas as páginas, o que é necessário. Uma maneira de resolver isso é através
.htaccess
da pasta raiz. Apenas para ocultar os erros. [Coloque uma das seguintes linhas no arquivo]Ou
Em seguida, para definir o relatório de erros
Se você está se perguntando como foi o valor
30719
, E_ALL (32767), E_STRICT (2048) são na verdade constantes que mantêm o valor numérico e (32767 - 2048 = 30719
)fonte
php_admin_value error_reporting
para isso funcionar (na configuração do vhost).O valor padrão do sinalizador error_reporting é E_ALL & ~ E_NOTICE, se não estiver definido no php.ini. Mas em algumas instalações (principalmente as que se destinam a ambientes de desenvolvimento), o E_ALL | E_STRICT definido como valor deste sinalizador (este é o valor recomendado durante o desenvolvimento ). Em alguns casos, especialmente quando você deseja executar alguns projetos de código aberto, que foram desenvolvidos antes da era do PHP 5.3 e ainda não atualizados com as melhores práticas definidas pelo PHP 5.3, em seu ambiente de desenvolvimento, você provavelmente encontrará algumas mensagens como você está recebendo. A melhor maneira de lidar com essa situação é definir apenas E_ALL como o valor do sinalizador error_reporting , emphp.ini ou em código (provavelmente em um controlador frontal como index.php em web-root da seguinte maneira:
fonte
No conjunto php.ini:
fonte
WordPress
Se você trabalha no ambiente wordpress, o Wordpress define o nível de erro no arquivo wp-includes / load.php na função
wp_debug_mode()
. Portanto, você precisa alterar o nível APÓS que essa função tenha sido chamada (em um arquivo não registrado no git, portanto, isso é apenas desenvolvimento), ou modificar diretamente aerror_reporting()
chamadafonte
Não vi uma resposta limpa e adequada para software pronto para produção, então aqui vai:
fonte