PHP 5 désactiver l'erreur de normes strictes

175

Je dois configurer mon script PHP en haut pour désactiver le rapport d'erreur pour des normes strictes.

Quelqu'un peut-il aider?

Manny Calavera
la source
8
@ 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 sur E_ALL & ~E_DEPRECATED & ~E_STRICTpour la production. Notez qu'ils vous suggèrent de désactiver les normes strictes.
Fake Code Monkey Rashid le
Localisez également votre fichier php.ini et copiez-le dans / usr / local / php5 / lib /
yadhu

Réponses:

185

Voulez-vous désactiver le rapport d'erreurs ou simplement empêcher l'utilisateur de le 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 consignés dans votre journal système standard ou utiliseront la error_logdirective pour spécifier exactement où vous voulez que les erreurs aillent.

Nate
la source
11
Juste pour énoncer explicitement l'évidence: bien sûr, vous pouvez également les définir dans votre php.inifichier, par exemple si vous ne pouvez pas modifier le code PHP.
sschuberth du
1
Cependant, la journalisation des erreurs strictes de production est également une mauvaise pratique. Puisque vous remplissez vos journaux avec des avis qui n'ont probablement pas d'importance, causant l'un ou les deux problèmes suivants: serverAdmin manquera / ignorera les erreurs et le répertoire des journaux consommera tout l'espace du serveur à un moment donné.
Lance
4
Cela ne fonctionne pas pour moi - j'ai dû utiliser E_ALL & ~ E_STRICT de Fake Code Monkey Rashid commentaire de la réponse ci
besimple
1
comment cela fonctionne avec ce que j'ai trouvé dans mon php.ini log_errors = On Vs ini_set ('display_errors', '0'); Est-ce que le dernier set gagne?
atterri le
@nate lorsque vous postez du code, veuillez nous indiquer où nous pouvons le coller. Je ne sais pas où le mettre: dans php.iniou .htaccessou quelque part dans mon code PHP.
Даниил Пронин
89

Pour aucune erreur.

error_reporting(0);

ou pour tout simplement pas strict

error_reporting(E_ALL ^ E_STRICT);

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

error_reporting(-1);

Tyler Carter
la source
56
+1: Je pense que le ^n'est bon que pour omettre un type d'erreur. Si vous souhaitez désactiver des types supplémentaires, vous devez utiliser le E_ALL & ~E_DEPRECATED & ~E_STRICTformat. Ou peut-être le (E_ALL & ~(E_DEPRECATED | E_STRICT))format.
Fake Code Monkey Rashid le
10
Remarque: E_STRICT ne fait partie de E_ALL que depuis php 5.4
Fred Haslam
@FakeCodeMonkeyRashid Je me demande pourquoi? probablement parce qu'alors l'ordre d'évacuation est important?
codeling
Supprimer le signalement des erreurs STRICT en PHP <5.4 ini_set('error_reporting', E_ALL&~E_STRICT); Suppression du signalement des erreurs STRICT en PHP> = 5.4ini_set('error_reporting', E_ALL^E_STRICT);
Mel_T
Je tiens à souligner que l'utilisation de ^("xor") plutôt que & ~("et non") est une mauvaise idée ! ^dépend de l' hypothèse que, par exemple, E_STRICT fait partie de E_ALL et en fera toujours partie. C'est mauvais parce que E_ALL a changé dans le passé (E_STRICT n'était pas passé, mais est maintenant depuis PHP 5.4). Si l'hypothèse échoue un jour, ^non seulement briser, mais ne fait le contraire de ce qu'il est censé faire: Il permettra E_STRICT en raison de la façon dont XOR ( ^) fonctionne. & ~cependant désactive toujours E_STRICT, quelle que soit la valeur actuelle de E_ALL. Par conséquent & ~devrait être utilisé.
Jay
31

Toutes les solutions ci-dessus sont correctes. Mais, quand nous parlons d'une application PHP normale, ils doivent être inclus dans chaque page, ce que cela nécessite. Un moyen de résoudre ce problème consiste .htaccessà utiliser le dossier racine. Juste pour cacher les erreurs. [Mettez l'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 30719est venue, E_ALL (32767), E_STRICT (2048) sont en fait des constantes qui contiennent une valeur numérique et ( 32767 - 2048 = 30719)

Starx
la source
2
Merci beaucoup - cela a fait l'affaire (solution .htaccess) en PHP 5.4.7 - rien d'autre - même la modification du .ini - ne faisait l'affaire.
Je l'ai utilisé php_admin_value error_reportingpour que cela fonctionne (dans la configuration vhost).
Lou Terrailloune
@Seza, Correct Corrigé.
Starx
1
ce n'est pas à propos de la page, cette méthode est préférée car la plupart des erreurs E_STRICT sont au moment de la compilation et ne peuvent pas être remplacées à l'exécution
AbiusX
2
Salut juste pour le rendre peu facile, pour ceux qui utilisent wamp, vous pouvez désactiver les erreurs en cliquant sur php> paramètres php >> afficher les erreurs. Si elle est cochée, décochez-la.
Hemang Rami
9

La valeur par défaut de l' indicateur error_reporting est E_ALL & ~ E_NOTICE s'il n'est pas défini dans php.ini. Mais dans certaines installations (en particulier les installations ciblant les environnements de développement), E_ALL | E_STRICT défini comme valeur de cet indicateur (il s'agit de la valeur recommandée lors du développement ). Dans certains cas, spécialement lorsque vous voudrez exécuter des projets open source, qui ont été développés avant l'ère 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 rencontrerez probablement messages comme vous recevez. La meilleure façon de faire face à cette situation est de définir uniquement E_ALL comme valeur de indicateur error_reporting , soit dansphp.ini ou dans le code (probablement dans un contrôleur frontal comme index.php dans web-root comme suit:

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

Dans l'ensemble php.ini:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
MSS
la source
4

WordPress

Si vous travaillez dans l'environnement wordpress, Wordpress définit le niveau d'erreur dans le fichier wp-includes / load.php dans function wp_debug_mode(). Il faut donc changer le niveau APRÈS que cette fonction ait été appelée (dans un fichier non archivé dans git donc c'est uniquement du développement), ou soit modifier directement l' error_reporting()appel

Nicola Peluchetti
la source
C'est vraiment utile, j'avais activé le mode de débogage pour une installation de Wordpress et je ne m'en suis pas rendu compte. Merci pour l'information!
Tim
2

Je n'ai pas vu de réponse propre et adaptée aux logiciels prêts pour la production, alors la voici:

/*
 * 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);
Geai
la source