150 votes

Comment désactiver les avis de PHP ?

Notice: Constant DIR_FS_CATALOG already defined

J'ai déjà commenté display_errors en php.ini mais il ne fonctionne pas.

Comment faire pour que PHP n'affiche pas ce genre de choses dans les navigateurs ?

UPDATE

J'ai mis display_errors = Off mais il signale toujours de tels avis,

Est-ce un problème avec PHP 5.3 ?

Nombreux rapports Pile d'appels aussi..

3 votes

Si vous utilisez Apache, vous devrez peut-être redémarrer votre serveur ! Si vous utilisez XAMPP, sélectionnez simplement "redémarrer" dans l'application du gestionnaire.

3 votes

Je suggère d'exécuter grep display_errors /path/to/php.ini pour voir si votre ligne est remplacée quelque part dans le fichier. C'est ce qui m'est arrivé.

1 votes

Le signalement des erreurs est la solution

260voto

Cristian Points 92147

Dans la documentation de PHP ( Signalement des erreurs ):

<?php
// Turn off all error reporting
error_reporting(0);
?>

D'autres options intéressantes pour cette fonction :

<?php

// Report simple running errors
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// Reporting E_NOTICE can be good too (to report uninitialized
// variables or catch variable name misspellings ...)
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

// Report all errors except E_NOTICE
// This is the default value set in php.ini
error_reporting(E_ALL & ~E_NOTICE);
// For PHP < 5.3 use: E_ALL ^ E_NOTICE

// Report all PHP errors (see changelog)
error_reporting(E_ALL);

// Report all PHP errors
error_reporting(-1);

// Same as error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);

?>

0 votes

Très utile et donne la réponse à la question. Même si je sais qu'il est préférable de corriger également tous les avis. Parfois, il peut être pratique d'afficher tout sauf les avis.

3 votes

Désactiver uniquement les avis n'a pas fonctionné pour moi en utilisant ^ NOTICE comme indiqué dans le post ci-dessus. Pour PHP v5.3, utilisez : E_ALL & ~E_NOTICE

0 votes

Si vous avez une API REST qui renvoie du JSON, du XML ou autre, il est préférable de les désactiver. Ou au moins les convertir en exceptions et les traiter en conséquence.

98voto

Pekka 웃 Points 249607

Vous pouvez désactiver les avis en définissant le niveau de rapport d'erreur sur E_ALL & ~E_NOTICE; en utilisant soit error_reporting ini ou le paramètre error_reporting() fonction.

Cependant, les avis sont ennuyeux (je peux compatir en partie ) mais ils servent à quelque chose. Vous ne devriez pas définir une constante deux fois, la deuxième fois ne fonctionnera pas et la constante restera inchangée !

7 votes

+1 : J'approuve le fait d'avoir mentionné qu'il devrait corriger les erreurs, et non pas désactiver les rapports. Et vous l'avez fait d'une manière plus douce que @Jonathan Kuhn :-)

1 votes

Non, il semble que ce soit un bug de php5.3, display_errors ne fonctionne pas comme prévu.

0 votes

@user try a phpinfo() pour voir si le paramètre s'applique réellement. Pardonnez-moi, mais je doute fortement que vous ayez trouvé un bug dans PHP 5.3 - je ne le croirai que lorsque je le verrai :)

42voto

Paul Salber Points 351

Pour la ligne de commande php, définissez

error_reporting = E_ALL & ~E_NOTICE

sur /etc/php5/cli/php.ini

commande php l'exécution omet ensuite les avis.

1 votes

En faisant ceci error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING dans le php.ini. Cela désactive les notifications et les avertissements de PHP. De sorte qu'aucune notification et aucun avertissement de PHP ne sont visibles dans les navigateurs.

0 votes

Cela vaut pour les paramètres de la console php. Si vous utilisez php pour générer des pages web sur apache2, le fichier de configuration du serveur web est /etc/php5/apache2/php.ini. Il est préférable d'utiliser phpinfo() pour voir quel fichier de configuration est réellement utilisé.

4voto

jeroen Points 47068

Vous pouvez définir ini_set('display_errors',0); dans votre script ou définissez quelles erreurs vous voulez afficher avec error_reporting() .

1 votes

J'avais besoin d'utiliser le ini_set mentionnée ici, la méthode error_reporting(0) La méthode mentionnée ailleurs n'a pas eu d'effet.

2voto

Jonathan Kuhn Points 8217

En ne provoquant pas les erreurs :

defined('DIR_FS_CATALOG') || define('DIR_FS_CATALOG', 'whatever');

Si vous devez vraiment le faire, changez le rapport d'erreur en utilisant error_reporting() en E_ALL^E_NOTICE.

1 votes

S'il s'agit d'un site de production, que vous pensiez ou non qu'il est exempt d'erreurs, vous ne devez toujours pas afficher les erreurs si elles se produisent - donc "en ne provoquant pas les erreurs" semble être une réponse un peu effrontée à une question valide.

5 votes

Depuis quand peut-on autoriser les erreurs dans un site de production ? Je suis d'accord que sur un site de production vous ne devriez pas afficher les erreurs, ce n'est pas ce que je disais. Je disais que vous devriez vérifier si la constante est définie et la définir si ce n'est pas le cas (c'est pourquoi j'ai donné l'exemple de code).

0 votes

Bien que votre réponse ne soit pas la plus "sympa", elle semble répondre pleinement à la question du PO. +1 à votre réponse et /souhaitons qu'elle soit marquée comme réponse, car c'est la bonne réponse.

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