PHP 5 desativar erro de padrões estritos

175

Preciso configurar meu script PHP na parte superior para desativar o relatório de erros para padrões rígidos.

Alguém pode ajudar?

Manny Calavera
fonte
8
@ 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.

Nate
fonte
11
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

error_reporting(-1);

Tyler Carter
fonte
56
+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)

Starx
fonte
2
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:

if(defined('E_STRICT')){
    error_reporting(E_ALL);
}
MN Islam Shihan
fonte
8

No conjunto php.ini:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
MSS
fonte
4

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 a error_reporting()chamada

Nicola Peluchetti
fonte
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);
Jay
fonte