Gestion des erreurs

Soyez le premier à donner votre avis sur cette source.

Vue 6 120 fois - Téléchargée 253 fois

Description

Ce code enregistre les erreurs PHP rencontrées dans un fichier, stoppe le script si ces erreurs sont trop importante, et enregistre la date où l'erreur s'est produite la dernière fois.

Source / Exemple :


<?php 
//Fonction qui reçoit les erreurs en argument
function erreurphp( $errno , $errmsg , $errfichier , $errligne , $errcontext ){
	$date = date( 'd/m/Y H:i:s' );
	switch( $errno ){
		//Si l'erreur est assez importante et nécessite l'arrêt du script :
		case 1:
		case 16:
		case 64:
		case 256:
			//On marque l'erreur
			ecrire_fichier( "[" . $date . "] -- [ " . $errno . " ] E_ERROR : " . $errmsg . " --- fichier : '" . $errfichier . "' --- Ligne : " . $errligne );
			//Et on arrête le script
			die( '<b><span style="color: #FF0000;">Erreur</span></b> : Rééssayez plus tard.' );
		//Sinon, si l'erreur est moindre, mais assez importante tout de même
		case 2:
		case 4:
		case 32:
		case 128:
		case 512:
			//On écrit l'erreur
			ecrire_fichier( "[" . $date . "] -- [" . $errno . "] E_WARNING : " . $errmsg . " --- fichier : '" . $errfichier . "' --- Ligne : " . $errligne );
			break;
		//Sinon, si c'est juste un 'Notice' (avertissement)
		case 8:
		case 1024:
				ecrire_fichier( "[" . $date . "] -- [" . $errno . "] E_NOTICE : " . $errmsg . " --- fichier : '" . $errfichier . "' --- Ligne : " . $errligne );
			break;
	}
}

//toutes les erreurs doivent être reportées
error_reporting( E_ALL );
//Quand on rencontre une erreur, on appelle la fonction erreurphp()
$error_handler = set_error_handler("erreurphp");

//La fonction qui écrit dans le fichier
function ecrire_fichier( $msg ){
	//Vous pouvez renommer ce fichier comme vous voulez, il est conseillé de le mettre dans un répertoire innaccessible depuis HTTP (accessible seulement par FTP et PHP)
	$fichier = "error.log";
	//si le fichier n'existe pas
	if( !file_exists( $fichier ) ) {
		//on l'ouvre en mode 'création'
		$mode = 'x+'; 
		// $msg contient ce qui sera écrit en plus dans le fichier
		$msg .= "\n";
	//Sinon (si il existe)
	} else {
			//on l'ouvre en mode 'écriture'
		$mode = 'a+';
		//On récupère le contenu du fichier
		$contenu = file_get_contents( $fichier );
		//On récupère le message d'erreur en enlevant la date
		$message = substr( $msg , strpos( $msg , ']' ) + 5 );
		//Si le message d'erreur existe déjà dans le fichier
		if( ereg( "\[[0-9]{2}\/[0-9]{2}\/[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}\] -- " . preg_quote( $message ) , $contenu , $regs ) ) {
			//On remplace le message d'erreur du fichier par notre message d'erreur, avec la date actuelle
			$msg = ereg_replace( preg_quote( $regs[0] ) , $msg , $contenu );
			//on décide d'ouvrir le fichier en 'remise à zéro', car on a remplacé ce qu'il fallait.
			$mode = 'w';
		} else {
			$msg .= "\n";
		}
	}
	//On ouvre le fichier avec le mode choisi
	$fp = fopen( $fichier , $mode );
	//On écrit le message
	fwrite( $fp , $msg );
	//On ferme le fichier
	fclose( $fp );
}
?>

Conclusion :


Voilà, le code est complet.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_franckydeluka
Messages postés
228
Date d'inscription
mardi 5 avril 2005
Statut
Membre
Dernière intervention
4 janvier 2008
1 -
Très bien comme source ! ;-) bien commentée et sans fioriture inutiles
DMK04
Messages postés
206
Date d'inscription
samedi 29 octobre 2005
Statut
Membre
Dernière intervention
7 mars 2012
-
Salut,

C'est exactement ce que je cherchais, sauf que j'enregistre les erreurs dans une base de données :).
Très bien commentée, j'ai compris à la première lecture. 10/10

Merci pour ton code.

++
Samiby
Messages postés
118
Date d'inscription
mercredi 26 novembre 2003
Statut
Membre
Dernière intervention
2 janvier 2006
-
Quand le script est arrêté, c'est que l'on peut pas fairte autrement, le problème est trop grave pour continuer.
Pour addicher aucune erreur, il sufit de supprimer
" die( 'Erreur', "Fatal error :" . $errmsg . " au fichier " . $errfichier . " à la ligne " . $errligne );"
(cf. fonction erreurphp() ).
cs_yoman64
Messages postés
593
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
4 décembre 2008
-
C'Est bien comme source :-)
Mais coment on fait pour que les erreurs s'affiche pas ?
Et que les erreurs n'Arrete pas le script ? parce que php arrete le script si une erreur arrive :(

En t-k je te met 9/10

Bonne prog
++

PhPKODe.Com

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.