175 votes

Erreur de normes strictes désactivées par PHP 5

J'ai besoin de configurer mon script PHP en haut pour désactiver le rapport d'erreur pour des normes strictes.

Quelqu'un peut-il m'aider ?

8 votes

@451F : Je pense que les mots clés ici sont "normes strictes". Je ne connais pas les versions précédentes, mais avec PHP 5.4.0, il est recommandé de définir le rapport d'erreur à E_ALL & ~E_DEPRECATED & ~E_STRICT pour la production. Notez qu'ils vous suggèrent de désactiver des normes strictes.

0 votes

Trouvez également votre fichier php.ini et copiez-le dans /usr/local/php5/lib/.

187voto

Nate Points 8984

Voulez-vous désactiver les rapports d'erreur ou simplement empêcher l'utilisateur de les voir ? C'est généralement une bonne idée de consigner les erreurs, même sur un site de production.

# in your PHP code:
ini_set('display_errors', '0');     # don't show any errors...
error_reporting(E_ALL | E_STRICT);  # ...but do log them

Ils seront enregistrés dans votre journal système standard, ou utilisez la fonction error_log pour spécifier exactement où vous voulez que les erreurs aillent.

11 votes

Afin d'énoncer explicitement l'évidence : bien sûr, vous pouvez également définir ces paramètres dans votre php.ini par exemple, si vous ne pouvez pas modifier le code PHP.

1 votes

Cependant, la journalisation des erreurs strictes en production est également une mauvaise pratique. En effet, vous allez remplir vos journaux avec des avis qui n'ont probablement pas d'importance, provoquant l'un ou les deux problèmes suivants : serverAdmin va rater/ignorer les erreurs et le répertoire des journaux va consommer tout l'espace du serveur à un moment donné.

4 votes

Cela ne fonctionne pas pour moi - j'ai dû utiliser E_ALL & ~E_STRICT du commentaire de Fake Code Monkey Rashid de la réponse ci-dessous

89voto

Tyler Carter Points 30030

Pour aucune erreur.

error_reporting(0);

ou pour ne pas être strict

error_reporting(E_ALL ^ E_STRICT);

et si vous voulez à nouveau afficher toutes les erreurs, utilisez

error_reporting(-1);

56 votes

+1 : Je crois que le ^ n'est bon que pour omettre un seul type d'erreur. Si vous voulez désactiver d'autres types d'erreurs, vous devez utiliser la fonction E_ALL & ~E_DEPRECATED & ~E_STRICT format. Ou peut-être que le (E_ALL & ~(E_DEPRECATED | E_STRICT)) format.

10 votes

Note : E_STRICT ne fait partie de E_ALL que depuis php 5.4.

0 votes

@FakeCodeMonkeyRashid Je me demande pourquoi ? probablement parce que l'ordre d'évaulation est alors important ?

31voto

Starx Points 38727

Toutes les solutions ci-dessus sont correctes. Mais, lorsqu'il s'agit d'une application PHP normale, elles doivent être incluses dans chaque page qu'elle requiert. Une façon de résoudre ce problème est d'utiliser .htaccess dans le dossier racine. Juste pour cacher les erreurs. [Mettez une des lignes suivantes dans le fichier]

php_flag display_errors off

Ou

php_value display_errors 0

Ensuite, pour définir le rapport d'erreur

php_value error_reporting 30719

Si vous vous demandez comment la valeur 30719 came, E_ALL (32767), E_STRICT (2048) sont en fait des constantes qui contiennent des valeurs numériques et ( 32767 - 2048 = 30719 )

2 votes

Merci beaucoup. Cela a fonctionné (solution .htaccess) en PHP 5.4.7. Rien d'autre, même la modification du .ini, n'a fonctionné.

0 votes

J'ai utilisé php_admin_value error_reporting pour que cela fonctionne (dans la configuration du serveur virtuel).

0 votes

@Seza, c'est corrigé.

9voto

M N Islam Shihan Points 121

La valeur par défaut de signalement des erreurs Le drapeau est E_ALL & ~E_NOTICE s'il n'est pas défini dans le php.ini. Mais dans certaines installations (particulièrement les installations visant les environnements de développement) a E_ALL | E_STRICT fixé comme valeur de ce drapeau (c'est le valeur recommandée au cours du développement ). Dans certains cas, notamment lorsque vous souhaitez exécuter des projets open source, qui ont été développés avant l'ère de PHP 5.3 et qui n'ont pas encore été mis à jour avec les meilleures pratiques définies par PHP 5.3, dans votre environnement de développement, vous obtiendrez probablement des messages comme ceux que vous obtenez. La meilleure façon de faire face à cette situation, est de mettre seulement E_ALL comme la valeur de Signalement des erreurs soit dans php.ini ou dans code (probablement dans un contrôleur frontal comme index.php dans web-Root comme suit :

if(defined('E_STRICT')){
    error_reporting(E_ALL);
}

8voto

MSS Points 1767

Dans le php.ini, définissez :

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X