Gérer les niveaux erreur de php via .htaccess

Il peut être parfois très utile de modifier le comportement de php en cas d’erreur dans le code d’une application, qu’elle soit de vous ou du monde open source.
Nous allons voir ici quelques exemples de fichier .htaccess permettant de modifier le niveau d’erreur de php.

  • Ne pas afficher les erreurs PHP
    [code type= »shell »]# pas d’affichage des erreurs php
    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
    [/code]
  • Enregistrer les erreurs dans un fichier de log
    [code type= »shell »]# utiliser un fichier de log pour les erreurs PHP
    php_flag log_errors on
    php_value error_log /var/www/vhosts/domain/httpdocs/PHP_errors.log
    # et pour préciser la taille maximale d’une entrée dans ce fichier
    log_errors_max_len 2048
    [/code]
  • Et pour protéger l’accès à votre fichier de log
    [code type= »shell »]# protéger votre fichier de log

    Order allow,deny
    Deny from all
    Satisfy All

    [/code]

  • Enregistrer les erreurs dans un fichier de log
    [code type= »shell »]# utiliser un fichier de log pour les erreurs PHP
    php_flag log_errors on
    php_value error_log /var/www/vhosts/domain/httpdocs/PHP_errors.log
    [/code]
  • Si vous souhaitez ne pas afficher plusieurs fois la même erreur (même numéro de ligne et même fichier) ajouter ceci
    [code type= »shell »]
    php_flag ignore_repeated_errors on
    php_flag ignore_repeated_source on
    [/code]

De manière générale le niveau d’erreur peut être préciser avec la directive suivante

[code type= »shell »]
# directive générale pour préciser le niveau d’erreur
php_value error_reporting nombre
[/code]

ou nombre peut prendre les valeurs suivantes :
* 8191 (Complete) pour remonter toutes les erreurs exceptées les erreurs « run-time notices ».
* 128 pour enregistrer les erreurs de Zend scripting.
* 8 (Basic) pour afficher les erreurs « run-time notices », « compile-time parse errors » , et également « run-time errors » et « run-time warnings ».
* 1 (Minimal) pour enregistrer les erreurs fatales « run-time errors ».
Il existe d’autre possibilité de paramétrage , pour approfondir le sujet consulter ce site.

Voici un exemple de fichier .htaccess complet pour un site en environnement de production

[code type= »shell »]
# PHP traitement des erreurs sur un serveur en environnement de production

# désactivé les erreurs lors du démarrage
php_flag display_startup_errors off

# désactiver l’affichage de toutes les autres erreurs
php_flag display_errors off

# désactiver l’affchage html des erreurs
php_flag html_errors off

# activer l’enregistrement dans un fichier
php_flag log_errors on

# désactivation mode répétition
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off

# activer l’enregistrement des problèmes mémoire
php_flag report_memleaks on

# préservé la dernière erreur via php_errormsg
php_flag track_errors on

# désactivé le formatage des liens de référence d’erreur
php_value docref_root 0
php_value docref_ext 0

# chemin du fichier de log
php_value error_log /var/www/vhosts/domain/httpdocs/PHP_errors.log

# précisez le niveau d’enregistrement des erreurs
php_value error_reporting -1

# désactiver la taille maximale des erreurs reportées
php_value log_errors_max_len 0

# protéger votre fichier de log des accès public

Order allow,deny
Deny from all
Satisfy All

[/code]

Et pour un environnement en mode développement ou testing :

[code type= »shell »]
# PHP traitement des erreurs sur un serveur en environnement de développement ou testing
php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log /var/www/vhosts/domain/httpdocs/PHP_errors.log
php_value error_reporting -1
php_value log_errors_max_len 0

Order allow,deny
Deny from all
Satisfy All

[/code]