Comment désactiver les notifications PHP?

126
Notice: Constant DIR_FS_CATALOG already defined

Je l' ai déjà fait remarquer sur display_errorsdans php.ini, mais ne fonctionne pas.

Comment faire en sorte que PHP ne renvoie pas de telles choses aux navigateurs?

METTRE À JOUR

Je mets display_errors = Offlà mais ça rapporte toujours de tels avis,

Est-ce un problème avec PHP 5.3?

Signaler également de nombreuses piles d'appels .

user198729
la source
3
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.
st4wik
2
Je suggère de courir grep display_errors /path/to/php.inipour voir si votre ligne est remplacée quelque part dans le fichier. C'est ce qui m'arrivait.
usandfriends
Error_reporting est la solution
David Stienen
essayez ini_set('display_errors',0)dans votre fichier php. Lorsque vos paramètres ini ne fonctionnent pas, vous devez vérifier si phpinfo()affiche la valeur souhaitée. Sinon, vous avez soit changé le mauvais fichier ini, soit quelque chose écrase vos valeurs de php.ini
Radon8472
ce n'est pas un bogue de php 5.3. display_errors fonctionne de php 4.0.3 jusqu'aux dernières versions @see 3v4l.org/87gIl
Radon8472

Réponses:

78

Vous pouvez définir display_errorsà 0ou utiliser la error_reporting()fonction.

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

Pekka
la source
4
+1: J'approuve de mentionner qu'il devrait corriger les erreurs et non désactiver le signalement. Et vous l'avez fait d'une manière plus douce que @Jonathan Kuhn :-)
Josh
1
Non, il semble que ce soit un bogue de php5.3, display_errorsne fonctionne pas comme prévu.
user198729
@user essaie phpinfo()de voir si le paramètre s'applique réellement. Pardonnez-moi, mais je doute fortement que vous ayez trouvé un bogue dans PHP 5.3 - je ne le croirai que quand je le verrai :)
Pekka
Étrange, le local valueest master value
activé
1
@user Je pense que la valeur locale peut provenir de ini_setdirectives ou de php_ini_flagparamètres dans des .htaccessfichiers.
Pekka
242

Depuis la documentation PHP ( error_reporting ):

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

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);

?>
Cristian
la source
Très utile et donne la réponse à la question. Bien que je sache qu'il est préférable de corriger tous les avis également. Parfois, il peut être pratique d'afficher tout sauf les avis.
Timo002
3
Désactiver uniquement les avis ne fonctionnait pas pour moi en utilisant ^ AVIS comme indiqué dans l'article ci-dessus. Pour PHP v5.3, utilisez: E_ALL & ~ E_NOTICE
Chizzle
Si vous avez une API REST renvoyant JSON ou XML ou autre, vous voudrez peut-être les désactiver. Ou du moins les convertir en exceptions et les gérer en conséquence.
TheRealChx101
Bonjour. A travaillé pour moi. Merci beaucoup.
H.Farid
Display_errors contrôle si les erreurs sont envoyées à stdoutput. Mais quand vous changez error_reporting à 0, vous désactivez totalement tous les trucs de gestion des erreurs et de journalisation des erreurs.
Radon8472
30

Pour la ligne de commande php, définissez

error_reporting = E_ALL & ~E_NOTICE

dans /etc/php5/cli/php.ini

l' phpexécution de la commande omet ensuite les notifications.

Paul Salber
la source
En faisant ceci error_reporting = E_ALL & ~ E_NOTICE & ~ E_WARNING dans le php.ini. Il désactive l'avis PHP et les avertissements PHP. Pour qu'aucun avis php et avertissements php ne soient visibles dans les navigateurs
Deepak Lamichhane
Cela vaut pour les paramètres php de la console. Si vous utilisez php pour générer des pages Web sur le fichier de configuration du serveur Web Apache2 est /etc/php5/apache2/php.ini Il est préférable d'utiliser phpinfo () pour voir quel fichier de configuration est réellement utilisé.
MilanG
23
<?php

// Turn off all error reporting
error_reporting(0);

// 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
error_reporting(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);

?>

source http://php.net/manual/en/function.error-reporting.php

Abhishek Goel
la source
2
N'est-ce pas juste un double de cette réponse existante publiée il y a des années?
Pang
Nous avons tous les deux copié-collé à partir de la documentation php et les deux réponses ont mentionné les ressources.
Abhishek Goel
@AbhishekGoel Les licornes sont des poneys déguisés, cette déclaration n'est pas pertinente, vous avez toujours dupliqué la réponse déjà existante quatre ans plus tard.
Ricky Boyce
@RickyB Je n'ai pas vérifié la réponse existante et je n'ai pas non plus copié.
Abhishek Goel
12

Utilisé cette ligne dans votre code

error_reporting(E_ALL ^ E_NOTICE);  

Je pense que sa main vous est pleine.

vicky mahale
la source
6

Tu recherches:

php -d error_reporting="E_ERROR | E_WARNING | E_PARSE"
Christian Tismer
la source
2
Salut @Christian, et bienvenue sur StackOverflow! À l'avenir, ce serait formidable si vous pouviez ajouter un peu d'explication / détail supplémentaire à votre réponse pour éclairer ceux qui la voient sur pourquoi / comment la solution fonctionne / résout le problème. Merci beaucoup et bon codage :)
Zachary Kniebel
1
exactement! J'utilise /usr/bin/php -d error_reporting="E_ERROR | E_WARNING | E_PARSE" -f /path/to/file.phppour mon crontab
vladkras
4

Je préfère ne pas définir l' error_reportingintérieur de mon code. Mais dans un cas, un produit hérité, il y a tellement d'avis qu'ils doivent être cachés.

J'ai donc utilisé l'extrait suivant pour définir la valeur configurée côté serveur pour error_reportingmais soustraire le E_NOTICEs.

error_reporting(error_reporting() & ~E_NOTICE);

Le paramètre de rapport d'erreurs peut maintenant être configuré davantage dans php.iniou .htaccess. Seuls les avis seront toujours désactivés.

algorithme
la source
3

Vous pouvez définir ini_set('display_errors',0);dans votre script ou définir les erreurs avec lesquelles vous souhaitez afficher error_reporting().

jeroen
la source
J'avais besoin d'utiliser la ini_setméthode mentionnée ici, la error_reporting(0)méthode mentionnée ailleurs n'a eu aucun effet.
pix
2

en ne provoquant pas les erreurs:

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

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

Jonathan Kuhn
la source
1
S'il s'agit d'un site de production, que vous pensiez ou non qu'il est sans erreur, vous ne devriez toujours pas afficher les erreurs si elles surviennent - donc `` en ne causant pas les erreurs '' semble être une réponse un peu effrontée à une question valide.
Came
5
depuis quand est-il acceptable d'autoriser des erreurs dans un site de production? Je suis d'accord que sur un site de production il ne faut pas afficher d'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 sinon (c'est pourquoi j'ai donné l'exemple de code).
Jonathan Kuhn
Bien que votre réponse ne soit pas la plus «gentille», elle semble répondre au maximum à la question du PO. +1 à votre réponse et / souhaite qu'elle soit marquée comme réponse, car c'est la bonne réponse.
Nazca
@Nazca Oui, j'ai depuis changé de comportement et j'essaye d'être beaucoup plus amical. :)
Jonathan Kuhn
2

Pour le code PHP:

<?php
error_reporting(E_ALL & ~E_NOTICE);

Pour la php.iniconfiguration:

error_reporting = E_ALL & ~E_NOTICE
Nabi KAZ
la source
1

J'ai découvert cette astuce récemment. Frappez un @ au début d'une ligne qui peut produire un avertissement / une erreur.

Comme par magie, ils disparaissent.

DrLazer
la source
21
C'est généralement une mauvaise idée, c'est comme mettre des bouchons d'oreille parce que votre voiture fait un bruit de grincement horrible.
David Morrow
10
Cela est en fait parfaitement logique pour certaines instances, par exemple lors du rendu d'une variable, qu'elle soit définie ou vide.
Frans
1
Cela n'a de sens que lorsque vous avez quelque chose comme un plugin WordPress que l'auteur n'a pas encore mis à jour et que vous savez exactement ce qui cause le problème. C'est un pansement, pas une solution.
Impératif du
J'aime à la fois error_reporting () et '@'. Je n'étais au courant ni de l'un ni de l'autre. Je vous remercie. J'aime le «@» car il fournit la même fonctionnalité que error_reporting (0) et est plus facile à taper. Si le problème est plus "le cintre retenant l'échappement" que le "bruit de grincement horrible", alors il permet au projet d'avancer. Je peux facilement trouver et résoudre ces problèmes quand il est temps. Cela a aidé à résoudre un problème où l'erreur est causée par des données lues à partir d'un fichier, donc pas de fautes de frappe ou de problèmes de bibliothèque.
Mark Longmire
1
Assurez-vous simplement de mettre @ là où vous êtes sûr à 100% de ce que vous faites.
Nick
1

Utilisez phpinfo () et recherchez pour Configuration File (php.ini) Pathvoir quel chemin de fichier de configuration pour php est utilisé. PHP peut avoir plusieurs fichiers de configuration en fonction de l'environnement dans lequel il s'exécute. Habituellement, pour la console, c'est:

/etc/php5/cli/php.ini

et pour php géré par apache c'est:

/etc/php5/apache2/php.ini

Et puis définissez error_reportingla manière dont vous en avez besoin:

http://www.phpknowhow.com/configuration/php-ini-error-settings/ http://www.zootemplate.com/news-updates/how-to-disable-notice-and-warning-in-phpini- fichier

MilanG
la source
1

Comme certains l'ont mentionné et si vous êtes l'auteur du code, vous devez corriger toutes ces erreurs, notifications, etc. car cela vous posera plus de problèmes à long terme que de ne pas les réparer (surtout lorsque vous mettez à niveau votre système d'exploitation). Pour votre serveur, vous devriez avoir des erreurs affichées uniquement dans vos journaux, pas dans l'écran du client.

Donc, pour éviter les erreurs dans votre navigateur, vous utilisez le display_errorsdrapeau comme vous l'avez déjà trouvé:

display_errors = Off

Maintenant, le vrai problème est lorsque vous exécutez du code de quelqu'un d'autre. Dans ce cas, la modification du code est susceptible d'être écrasée chaque fois que vous mettez à niveau ce code. Cela rend la maintenance de ce code fastidieuse.

Dans mon cas, j'utilise PHP crontabpour que le wp-cron.phpscript s'exécute de temps en temps. Je recevais des erreurs dans mes e-mails, ce qui devient fastidieux lorsque vous recevez un e-mail toutes les 10 minutes! Dans ce cas, cependant, le système Wordpress a un fichier de configuration comprenant un WP_DEBUGet ils appellent la error_reporting()fonction donc essayer de changer la error_reportingvariable sur la ligne de commande ne fonctionnera pas. Au lieu de cela, vous devez modifier le wp-config.phpfichier dans le dossier racine et vous assurer que le WP_DEBUGest défini sur false. Sinon, vous recevrez tous ces avertissements et notifications tout le temps.

Alexis Wilke
la source
0

Vous pouvez vérifier si la constante est déjà définie en utilisant:

<?php
if (!defined('MYCONST'))
    define('MYCONST', 'Weeha!');
?>
Thiago Belem
la source
0

Je pense que commenter display_errors dans php.ini ne fonctionnera pas car la valeur par défaut est On. Vous devez le régler sur «Off» à la place.

N'oubliez pas de redémarrer Apache pour appliquer les modifications de configuration.

Notez également que même si vous pouvez définir display_errors lors de l'exécution, le modifier ici n'affecte pas les erreurs FATAL.

Comme indiqué par d'autres, idéalement pendant le développement, vous devriez exécuter avec error_reporting au plus haut niveau possible et display_errors activé. Bien que gênants au début, ces erreurs, avertissements, avis et conseils de codage stricts s'additionnent et vous permettent de devenir un meilleur codeur.

AllenJB
la source
0

Constantes doubles définies

Pour corriger l'erreur spécifique ici, vous pouvez vérifier si une constante est déjà définie avant de la définir:

if ( ! defined( 'DIR_FS_CATALOG' ) ) 
  define( 'DIR_FS_CATALOG', 'something...' );

Je commencerais personnellement par une recherche dans la base de code pour la constante DIR_FS_CATALOG, puis remplacerais la double définition par celle-ci.

Masquer les avis PHP en ligne, au cas par cas

PHP fournit l' @opérateur de contrôle d'erreur, que vous pouvez utiliser pour ignorer des fonctions spécifiques qui provoquent des avis ou des avertissements.

En utilisant cela, vous pouvez ignorer / désactiver les avis et les avertissements au cas par cas dans votre code, ce qui peut être utile dans les situations où une erreur ou un avis est intentionnel, planifié ou tout simplement ennuyeux et impossible à résoudre à la source . Placez un @avant la fonction ou la variable qui provoque une notification et elle sera ignorée.

Voici un exemple:

// Intentional file error
$missing_file = @file( 'non_existent_file' );

Vous trouverez plus d'informations à ce sujet dans la documentation des opérateurs de contrôle d'erreur de PHP .

Kevin Leary
la source