Gestion des erreurs

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

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.