2009-10-29 9 views
49

Je reçois les avis et les avertissements attendus et je voudrais les désactiver sur mon fichier php. les erreurs sont:Désactiver les avertissements et les erreurs sur php/mysql

Warning: fsockopen() 

et les avis sont:

Notice: A non well formed numeric value encountered in 

Je prévois d'utiliser ce script pour cron php et ne veux pas des erreurs ou des avis enregistrés nulle part.

+4

Si vous ne voulez pas que des erreurs vous soient envoyées par cron, vous pouvez pointer sa sortie sur '/ dev/null'. Pourtant, les erreurs sont généralement là pour une raison - vous aimeriez probablement savoir quand votre script cron se brise! Essayez de gérer les erreurs avec élégance. – ceejayoz

+0

Quelque chose de connexe: http://stackoverflow.com/questions/4330494/preventing-warnings-from-fsockopen – trante

Répondre

137

Lorsque vous êtes sûr que votre script est parfaitement travail, vous pouvez vous débarrasser de l'alerte et des avis comme celui-ci: cette ligne au début de votre script php:

error_reporting(E_ERROR); 

Avant cela, lorsque vous travaillez sur votre script, je vous conseille de déboguer correctement votre script de sorte que tous les avis ou les avertissements disparaissent un par un. Donc, vous devez d'abord définir comme bavard possible avec:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); 

MISE À JOUR: comment enregistrer les erreurs au lieu de les afficher Comme suggéré dans les commentaires, la meilleure solution consiste à enregistrer les erreurs dans un fichier afin que la développeur PHP voit les messages d'erreur, pas les utilisateurs. Une implémentation possible est via le fichier .htaccess, utile si vous n'avez pas accès au fichier php.ini (source).

# supress php errors 
php_flag display_startup_errors off 
php_flag display_errors off 
php_flag html_errors off 
php_value docref_root 0 
php_value docref_ext 0 
# enable PHP error logging 
php_flag log_errors on 
php_value error_log /home/path/public_html/domain/PHP_errors.log 
# prevent access to PHP error log 
<Files PHP_errors.log> 
Order allow,deny 
Deny from all 
Satisfy All 
</Files> 
+6

Ne faites pas cela. Supprimer toutes les erreurs est une idée horrible. – ceejayoz

+31

vous parlez comme si réciter un mantra. Dans ce cas d'utilisation spécifique, c'est exactement ce que l'utilisateur veut. S'il avait demandé un système d'enregistrement, il le demanderait. – pixeline

+4

Je suis d'accord avec ceejayoz et pixeline. Toutefois, error_reporting (0) ne doit être défini que comme une mesure de sécurité sur les environnements de production afin que les informations critiques ne soient pas divulguées par erreur aux utilisateurs malveillants. L'utilisation de error_reporting (0) pour «ignorer les erreurs» comporte un risque élevé de mener à de mauvaises choses. Je sais que c'est ce que l'auteur a demandé, mais je proposerais contre. –

2

vous pouvez définir le type d'erreur que vous avez besoin de rapports dans php.ini ou en utilisant la fonction error_reporting() sur le dessus de votre script.

18

Ajout de fonctions avec le symbole '@' pour supprimer certaines erreurs, par opposition à la désactivation de tous les rapports d'erreur.

Plus d'info: http://php.net/manual/en/language.operators.errorcontrol.php

PHP supporte un opérateur de contrôle d'erreur: le signe (@). Lorsqu'ils sont ajoutés à une expression dans PHP, les messages d'erreur qui pourraient être générés par cette expression seront ignorés.

@fsockopen();

+0

Ceci est généralement une meilleure solution pour le code en production, IMHO – billrichards

+1

Peut-être, "* Peut-être *", pour une fonction, cependant remplir vos scripts avec ceci vous demandera des problèmes plus tard quand * Quelque chose ne fonctionne pas et votre journal des erreurs est vide. Le meilleur moyen est de configurer un boîtier/commutateur pour activer et désactiver l'affichage des erreurs très rapidement. Puis, en direct, ils sont désactivés, dev/test peut être activé. De toute façon, la journalisation dans le fichier journal des erreurs est (presque) toujours conseillé – James

14

Toujours afficher les erreurs sur le serveur de test. Ne jamais afficher les erreurs sur le serveur de production.

Ecrivez un script pour déterminer si la page se trouve sur un serveur local, test ou live et définissez $ state sur "local", "testing" ou "live". Puis:

if($state == "local" || $state == "testing") 
{ 
ini_set("display_errors", "1"); 
error_reporting(E_ALL & ~E_NOTICE); 
} 
else 
{ 
error_reporting(0); 
} 
2

Si vous ne pouvez pas vous rendre à votre fichier php.ini pour une raison quelconque, désactivez les erreurs à stdout (display_errors) dans un.htaccess dans un répertoire en ajoutant la ligne suivante:

php_flag display_errors off

En outre, vous pouvez ajouter la journalisation des erreurs dans un fichier:

php_flag log_errors on

13

PHP référence error_reporting:

// 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 
// This is the default value set in php.ini 
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); 
+0

les rapports d'erreur seront désactivés mais ses rapports seront stockés dans un fichier journal dans le dossier. comment arrêter PHP pour faire des fichiers journaux? tnx –

+0

@MehdiJ: pour empêcher PHP de consigner les erreurs dans ** error_log ** ajouter ce code 'ini_set ('log_errors', 'off');' –

Questions connexes