web-dev-qa-db-fra.com

Désactiver les avertissements et les erreurs sur php / mysql

Je reçois les avis et les avertissements attendus et j'aimerais les désactiver sur mon fichier php. les erreurs sont:

Warning: fsockopen()

et les avis sont:

Notice: A non well formed numeric value encountered in

Je prévois d'utiliser cron pour ce script php et ne veux pas obtenir d'erreurs ou de notifications enregistrées.

51
Ossi

Lorsque vous êtes sûr que votre script fonctionne parfaitement, vous pouvez vous débarrasser de Warning et notez ce qui suit: Mettez cette ligne au début de votre script php:

error_reporting(E_ERROR);

Avant cela, lorsque vous travaillez sur votre script, je vous conseillerais de bien déboguer votre script afin que tout avis ou avertissement disparaisse un à un. Donc, vous devriez d'abord le définir le plus verbeusement possible avec:

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

UPDATE: comment enregistrer les erreurs au lieu de les afficher Comme suggéré dans les commentaires, la meilleure solution est de consigner les erreurs dans un fichier afin que seul le développeur php voie 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>
139
pixeline

Les fonctions de préfixe avec le symbole '@' suppriment certaines erreurs, par opposition à la désactivation de TOUT rapport de signalisation d'erreur.

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

PHP supporte un opérateur de contrôle d'erreur: l'arobase (@). Lorsque ajouté à une expression en PHP, tous les messages d'erreur pouvant être générés par cette expression seront ignorés.

@fsockopen();

18
Mike B

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, de test ou actif, et définissez $ state sur "local", "testing" ou "live". Ensuite:

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

Référence PHP 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);
13
Shankar Prakash G

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

php_flag display_errors off

de plus, vous pouvez ajouter une erreur de journalisation dans un fichier:

php_flag log_errors on

2
Flak DiNenno

vous pouvez définir le type de rapport d'erreur dont vous avez besoin dans php.ini ou en utilisant la fonction error_reporting () au-dessus de votre script.

2
Sabeen Malik