|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
PHP 5 CLASSES DE REDIRECTION DES EXCEPTIONS DANS UN SYSTÈME DE LOG
Information sur la source
Description
Voici un système permettant la redirection des exceptions dans un systeme de log. 1 classe abstraite: classe logException dérivée de la classe PHP5 Exception 2 classe dérivées classe logFileException qui redirige l'exception dans un fichier log classe logDbMysqlException qui redirige l'exception dans une table de base Mysql. Pour utiliser la source il faut créer une table de log en base comme décrit dans les premières lignes commentées de la source
Source
- <?php
- /**
- Desc:
- Classes gérant la redirection d'exceptions dans un systeme de log
- Pour utiliser le systeme de log dans Mysql
- il faut créer une table logTable dans une base Mysql de votre choix
-
- CREATE TABLE `TableLog` (
- `id` int(11) NOT NULL auto_increment,
- `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
- `level` varchar(20) NOT NULL default 'WARNING',
- `msg` varchar(300) NOT NULL,
- `line` int(11) NOT NULL,
- `script` varchar(500) NOT NULL,
- `code` int(11) NOT NULL default '1',
- PRIMARY KEY (`id`)
- )
- */
- abstract class logException extends Exception
- {
- /**
- @property :string
- @desc :heure de lancement de l'exception
- */
- protected $sTime;
-
- /**
- @properties: const string
- @desc: les niveaux d'erreur
- */
- const LV_WARNING='WARNING';
- const LV_NOTICE='NOTICE';
- const LV_FATAL='FATAL';
-
- /**
- @param string $msg : message associé à l'exception
- @param int $code : code de l'exception
- @param int $level :niveau d'erreur de l'exception
- (optionel defaut FATAL)
- */
- public function __construct($msg,$code=1,$level=self::LV_WARNING)
- {
- parent::__construct($msg,$code);
- $this->sTime=date('Y-m-d H:i:s');
- $this->logIt($level,$msg);
- }
-
- /**
- @param int $level :niveau d'erreur de l'exception
- @param string $msg : message associé à l'exception
- */
- abstract protected function logIt($level,$msg);
-
- }
-
-
- /**
- Desc:
- Lancement et redirection des exceptions dans un fichier log
- */
- class logFileException extends logException
- {
- /**
- @property :boolean
- @desc :
- Flag statique indiquant si le nom du fichier log
- est horodaté ou non
- */
- protected static $bTimerNamedLog=true;
-
- /**
- @property :string
- @desc :
- Nom du fichier log sans l'extension dans lequel va être
- loguée l'exception
- */
- protected static $logName='logFile';
-
- /**
- @param string $slogName : Nom du fichier log sans extension
- @param boolean $bTimerNamedLog : Flag à true si le fichier est horodaté
- @param string $sLogExt optional defaut (.log) : Extension du fichier
- @desc :
- Methode statique définissant les propriétés du fichier log associé.
- Cette Méthode Peut être appelée sans qu'une exception de ce type soit
- levée
- */
- public static function setParam($sLogName,
- $bTimerNamedLog,$sLogExt='.log')
- {
- self::$bTimerNamedLog=$bTimerNamedLog;
- if (self::$bTimerNamedLog===true)
- self::$logName.=date('Ymd').$sLogExt;
- else self::$logName.=$sLogExt;
- }
-
- /**
- @param int $level :niveau d'erreur de l'exception
- @param string $msg : message associé à l'exception
- @desc :
- Traite l'exception dans le fichier log associé
- */
- protected function logIt($level,$msg)
- {
- if (file_exists(self::$logName))
- $fp=fopen(self::$logName,'a');
- else
- $fp=fopen(self::$logName,'w');
-
- if ($fp)
- {
- fputs($fp,strftime('%d/%m/%Y %H:%M:%S',
- strtotime($this->sTime)).' : '.
- $level.' - '.
- $msg.' - Line '.
- $this->getLine().' in '.
- $this->getFile()."\n");
- fclose($fp);
- }
- else die ('Interruption du script: Erreur durant l\'ouverture du '.
- 'fichier log');
- }
- }
-
- /**
- Desc:
- Lancement et redirection des exceptions dans une table log
- en base Mysql
- */
- class logDbMysqlException extends logException
- {
- /**
- @property : object généré par la connexion au serveur de Db
- @desc : ressource de connexion à la DB Mysql
- */
- protected static $oConnexionRes=NULL;
-
- /**
- @property : array
- @desc : configuration de la connexion à la base
- A MODIFIER
- */
- protected static $aConfigParam=array('host'=>'localhost',
- 'user'=>'root',
- 'pwd'=>'',
- 'db'=>'test',
- 'table'=>'logtable');
-
- /**
- @desc :
- Methode statique établissant la connexion si elle n'a pas été
- effectuée.
- */
- public static function link()
- {
- if (self::$oConnexionRes===NULL ||
- !mysql_ping(self::$oConnexionRes))
- {
- $msgdie='Interruption du script dans'.
- ' la methode '.__CLASS__.'::'.__FUNCTION__.
- '() sur Probleme de format détecté d\'une clé de config';
-
- if (!array_key_exists('host',self::$aConfigParam)) die ($msgdie);
- if (!array_key_exists('user',self::$aConfigParam)) die ($msgdie);
- if (!array_key_exists('pwd',self::$aConfigParam)) die ($msgdie);
- if (!array_key_exists('table',self::$aConfigParam)) die ($msgdie);
-
- self::$oConnexionRes=@mysql_connect(self::$aConfigParam['host'],
- self::$aConfigParam['user'],
- self::$aConfigParam['pwd'],
- true);
-
- $db=@mysql_select_db(self::$aConfigParam['db'],
- self::$oConnexionRes) or
- die ('Interruption du script dans'.
- ' la methode '.__CLASS__.'::'.__FUNCTION__.
- '() :1 ou pluseurs paramètres de connexion sont invalides');
- }
- }
-
- /**
- @param array $aConfig :
- Paramètres de connexion
- Exple :array('host'=>'localhost',
- 'user'=>'root',
- 'pwd'=>'',
- 'db'=>'test',
- 'table'=>'logtable');
- @desc :
- Methode statique initialisant les paramétres de connexion.
- Les paramètres peuvent être initialisées par cette methode ou
- directement en modifiant la déclaration de la propriété statique
- $aConfigParam de la classe
- */
- public static function setParam($aConfig)
- {
- if (!is_array($aConfig))
- die ('Interruption du script'.
- ' : '.__CLASS__.'::'.__FUNCTION__.'()'.
- ' paramètre array attendu');
-
- self::$aConfigParam=$aConfig;
- self::link();
-
- if (!mysql_ping(self::$oConnexionRes))
- {
- die ('Interruption du script'.
- ' : '.__CLASS__.'::'.__FUNCTION__.'() un problème '.
- 'de connexion inconnu a été identifié');
- }
-
- $queryTest='select 1 from '.self::$aConfigParam['table'].' limit 1';
-
- if (!$result=mysql_query($queryTest,self::$oConnexionRes))
- die ('Interruption du script'.
- ' Erreur dans '.__FUNCTION__.' : La table '.
- self::$aConfigParam['table'].' est inexistante en base '.
- self::$aConfigParam['db']);
- }
-
- /**
- @param int $level :niveau d'erreur de l'exception
- @param string $msg : message associé à l'exception
- @desc :
- Traite l'exception dans le fichier log associé
- */
- protected function logIt($level,$msg)
- {
- self::link();
- if (self::$oConnexionRes!==NULL)
- {
- $res=mysql_query('insert into '.self::$aConfigParam['table'].
- ' (level,time,msg,line,script,code) values'.
- '("'.$level.'","'.$this->sTime.'","'.
- mysql_real_escape_string($msg, self::$oConnexionRes).'",'.
- $this->getLine().
- ',"'.mysql_real_escape_string($this->getFile(),
- self::$oConnexionRes).
- '",'.$this->getCode().')',self::$oConnexionRes);
-
- if (!$res)
- die ('<br/>Interruption du script:'.
- ' Impossible de rediriger la '.__CLASS__.
- ' en table debase:'.
- ' erreur rencontrée :'.mysql_error());
- }
- else die ('<br/>Interruption du script sur '.__CLASS__.'::'.
- __FUNCTION__.'() : '.__CLASS__.'::setParam() doit être '.
- 'exécutée avant de lancer une '.__CLASS__);
- }
-
- /**
- @desc :
- clos la connexion
- */
- public function closeConnexion()
- {
- if (mysql_ping(self::$oConnexionRes))
- mysql_close(self::$oConnexionRes);
- }
- }
-
- /**
- Exemple utilisation des exceptions à rediriger vers un fichier log
- */
- logFileException::setParam('testLog',true);
-
- try
- {
- throw new logFileException('Exception 1 loguée vers logFile',1,
- logException::LV_WARNING);
- }
- catch(logFileException $e)
- {
- echo '<br/>'.$e->getMessage();
- try
- {
- throw new logFileException('Exception 2 loguée vers logFile',2,
- logException::LV_NOTICE);
- }
- catch(logFileException $e2)
- {
- echo '<br/>'.$e2->getMessage();
- print_r($e->getTrace());
- }
- }
-
- /**
- 2 eme Exemple :
- utilisation des exceptions à rediriger vers une db mysql
- Pour éviter de passer par setParam il faut directement modifier les
- valeurs dans la déclaration des propriétés de la classe
- logDbMysqlException
- */
- logDbMysqlException::setParam(array('host'=>'localhost',
- 'user'=>'userlogin',
- 'pwd'=>'pwdlogin',
- 'db'=>'test',
- 'table'=>'logtable'));
- try
- {
- throw new logDbMysqlException('Exception 1 loguée vers Mysql 1',1,
- logException::LV_WARNING);
- }
- catch(logDbMysqlException $e)
- {
- echo '<br/>'.$e->getMessage();
- // à Ne pas oublier si derniere exception gérée
- $e->closeConnexion();
- }
- ?>
<?php
/**
Desc:
Classes gérant la redirection d'exceptions dans un systeme de log
Pour utiliser le systeme de log dans Mysql
il faut créer une table logTable dans une base Mysql de votre choix
CREATE TABLE `TableLog` (
`id` int(11) NOT NULL auto_increment,
`time` timestamp NOT NULL default CURRENT_TIMESTAMP,
`level` varchar(20) NOT NULL default 'WARNING',
`msg` varchar(300) NOT NULL,
`line` int(11) NOT NULL,
`script` varchar(500) NOT NULL,
`code` int(11) NOT NULL default '1',
PRIMARY KEY (`id`)
)
*/
abstract class logException extends Exception
{
/**
@property :string
@desc :heure de lancement de l'exception
*/
protected $sTime;
/**
@properties: const string
@desc: les niveaux d'erreur
*/
const LV_WARNING='WARNING';
const LV_NOTICE='NOTICE';
const LV_FATAL='FATAL';
/**
@param string $msg : message associé à l'exception
@param int $code : code de l'exception
@param int $level :niveau d'erreur de l'exception
(optionel defaut FATAL)
*/
public function __construct($msg,$code=1,$level=self::LV_WARNING)
{
parent::__construct($msg,$code);
$this->sTime=date('Y-m-d H:i:s');
$this->logIt($level,$msg);
}
/**
@param int $level :niveau d'erreur de l'exception
@param string $msg : message associé à l'exception
*/
abstract protected function logIt($level,$msg);
}
/**
Desc:
Lancement et redirection des exceptions dans un fichier log
*/
class logFileException extends logException
{
/**
@property :boolean
@desc :
Flag statique indiquant si le nom du fichier log
est horodaté ou non
*/
protected static $bTimerNamedLog=true;
/**
@property :string
@desc :
Nom du fichier log sans l'extension dans lequel va être
loguée l'exception
*/
protected static $logName='logFile';
/**
@param string $slogName : Nom du fichier log sans extension
@param boolean $bTimerNamedLog : Flag à true si le fichier est horodaté
@param string $sLogExt optional defaut (.log) : Extension du fichier
@desc :
Methode statique définissant les propriétés du fichier log associé.
Cette Méthode Peut être appelée sans qu'une exception de ce type soit
levée
*/
public static function setParam($sLogName,
$bTimerNamedLog,$sLogExt='.log')
{
self::$bTimerNamedLog=$bTimerNamedLog;
if (self::$bTimerNamedLog===true)
self::$logName.=date('Ymd').$sLogExt;
else self::$logName.=$sLogExt;
}
/**
@param int $level :niveau d'erreur de l'exception
@param string $msg : message associé à l'exception
@desc :
Traite l'exception dans le fichier log associé
*/
protected function logIt($level,$msg)
{
if (file_exists(self::$logName))
$fp=fopen(self::$logName,'a');
else
$fp=fopen(self::$logName,'w');
if ($fp)
{
fputs($fp,strftime('%d/%m/%Y %H:%M:%S',
strtotime($this->sTime)).' : '.
$level.' - '.
$msg.' - Line '.
$this->getLine().' in '.
$this->getFile()."\n");
fclose($fp);
}
else die ('Interruption du script: Erreur durant l\'ouverture du '.
'fichier log');
}
}
/**
Desc:
Lancement et redirection des exceptions dans une table log
en base Mysql
*/
class logDbMysqlException extends logException
{
/**
@property : object généré par la connexion au serveur de Db
@desc : ressource de connexion à la DB Mysql
*/
protected static $oConnexionRes=NULL;
/**
@property : array
@desc : configuration de la connexion à la base
A MODIFIER
*/
protected static $aConfigParam=array('host'=>'localhost',
'user'=>'root',
'pwd'=>'',
'db'=>'test',
'table'=>'logtable');
/**
@desc :
Methode statique établissant la connexion si elle n'a pas été
effectuée.
*/
public static function link()
{
if (self::$oConnexionRes===NULL ||
!mysql_ping(self::$oConnexionRes))
{
$msgdie='Interruption du script dans'.
' la methode '.__CLASS__.'::'.__FUNCTION__.
'() sur Probleme de format détecté d\'une clé de config';
if (!array_key_exists('host',self::$aConfigParam)) die ($msgdie);
if (!array_key_exists('user',self::$aConfigParam)) die ($msgdie);
if (!array_key_exists('pwd',self::$aConfigParam)) die ($msgdie);
if (!array_key_exists('table',self::$aConfigParam)) die ($msgdie);
self::$oConnexionRes=@mysql_connect(self::$aConfigParam['host'],
self::$aConfigParam['user'],
self::$aConfigParam['pwd'],
true);
$db=@mysql_select_db(self::$aConfigParam['db'],
self::$oConnexionRes) or
die ('Interruption du script dans'.
' la methode '.__CLASS__.'::'.__FUNCTION__.
'() :1 ou pluseurs paramètres de connexion sont invalides');
}
}
/**
@param array $aConfig :
Paramètres de connexion
Exple :array('host'=>'localhost',
'user'=>'root',
'pwd'=>'',
'db'=>'test',
'table'=>'logtable');
@desc :
Methode statique initialisant les paramétres de connexion.
Les paramètres peuvent être initialisées par cette methode ou
directement en modifiant la déclaration de la propriété statique
$aConfigParam de la classe
*/
public static function setParam($aConfig)
{
if (!is_array($aConfig))
die ('Interruption du script'.
' : '.__CLASS__.'::'.__FUNCTION__.'()'.
' paramètre array attendu');
self::$aConfigParam=$aConfig;
self::link();
if (!mysql_ping(self::$oConnexionRes))
{
die ('Interruption du script'.
' : '.__CLASS__.'::'.__FUNCTION__.'() un problème '.
'de connexion inconnu a été identifié');
}
$queryTest='select 1 from '.self::$aConfigParam['table'].' limit 1';
if (!$result=mysql_query($queryTest,self::$oConnexionRes))
die ('Interruption du script'.
' Erreur dans '.__FUNCTION__.' : La table '.
self::$aConfigParam['table'].' est inexistante en base '.
self::$aConfigParam['db']);
}
/**
@param int $level :niveau d'erreur de l'exception
@param string $msg : message associé à l'exception
@desc :
Traite l'exception dans le fichier log associé
*/
protected function logIt($level,$msg)
{
self::link();
if (self::$oConnexionRes!==NULL)
{
$res=mysql_query('insert into '.self::$aConfigParam['table'].
' (level,time,msg,line,script,code) values'.
'("'.$level.'","'.$this->sTime.'","'.
mysql_real_escape_string($msg, self::$oConnexionRes).'",'.
$this->getLine().
',"'.mysql_real_escape_string($this->getFile(),
self::$oConnexionRes).
'",'.$this->getCode().')',self::$oConnexionRes);
if (!$res)
die ('<br/>Interruption du script:'.
' Impossible de rediriger la '.__CLASS__.
' en table debase:'.
' erreur rencontrée :'.mysql_error());
}
else die ('<br/>Interruption du script sur '.__CLASS__.'::'.
__FUNCTION__.'() : '.__CLASS__.'::setParam() doit être '.
'exécutée avant de lancer une '.__CLASS__);
}
/**
@desc :
clos la connexion
*/
public function closeConnexion()
{
if (mysql_ping(self::$oConnexionRes))
mysql_close(self::$oConnexionRes);
}
}
/**
Exemple utilisation des exceptions à rediriger vers un fichier log
*/
logFileException::setParam('testLog',true);
try
{
throw new logFileException('Exception 1 loguée vers logFile',1,
logException::LV_WARNING);
}
catch(logFileException $e)
{
echo '<br/>'.$e->getMessage();
try
{
throw new logFileException('Exception 2 loguée vers logFile',2,
logException::LV_NOTICE);
}
catch(logFileException $e2)
{
echo '<br/>'.$e2->getMessage();
print_r($e->getTrace());
}
}
/**
2 eme Exemple :
utilisation des exceptions à rediriger vers une db mysql
Pour éviter de passer par setParam il faut directement modifier les
valeurs dans la déclaration des propriétés de la classe
logDbMysqlException
*/
logDbMysqlException::setParam(array('host'=>'localhost',
'user'=>'userlogin',
'pwd'=>'pwdlogin',
'db'=>'test',
'table'=>'logtable'));
try
{
throw new logDbMysqlException('Exception 1 loguée vers Mysql 1',1,
logException::LV_WARNING);
}
catch(logDbMysqlException $e)
{
echo '<br/>'.$e->getMessage();
// à Ne pas oublier si derniere exception gérée
$e->closeConnexion();
}
?>
Historique
- 03 janvier 2008 01:29:36 :
- juste 1 petite modif
- 03 janvier 2008 13:29:10 :
- Correction d'un effet de bord sur connexions multiples.
- 03 janvier 2008 16:33:08 :
- correction bug
- 07 janvier 2008 20:22:52 :
- L214
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
redirection en php [ par flatmax ]
salut, j'aimerais savoir comment faire une redirection en PHP. merci de votre aide
redirection [ par ouiouiteur ]
comment rediriger une page vers :-soit une page sur mon serveur chez moi, si ma connexion est active-soit vers une page sur un hebergeur gratuit pour
AIDER MOI VITE SVP [ par g0belin ]
Bon voila mon probleme dans le code si dessous y a une erreur que je n'ai pas trouver au bout de 4 heures aidez moi svp--------------ERREUR-----------
Date probleme [ par g0belin ]
Ben voila en fait je veux faire un agenda...je veux afficher seulement les entree dans la base pour le jour courant...MAIS sa marche PASsa m'affiche t
Redirection [ par poiiop ]
Bonjourje voudrais faire une redirection particuliere : depuis mons site j envoie vers un autre site mais j aimerais que ce site soit vu au travers de
urgent..DB.php lib [ par fatNugly ]
bonjourquelqu'un aurait il une idee ou je pourrais trouverla class DB.php SVP c'est urgent et je suis legerement dans le caca!!merci aux ames chari
urgent DB error: not found [ par fatNugly ]
j'ai un probleme..j'essai de me connecter a ma bd, voici le code<?phprequire_once("classes/sql2xml.php");require_once("classes/DB.php"); header("Co
Problème de redirection [ par alainG ]
Après avoir créé un enregistrement dans une table à l'aide d'un formulaire, j'essaie de rediriger vers une liste de mon fichier sur une autre page av
problème de redirection [ par kwak ]
Bonjour à tous,je me trouve depuis quelques temps déjà confronté à un problème de redirection. Ici le problème se pose pour rediriger l'utilisateur se
aide redirection [ par nokiaboy ]
Je suis un GROS GROS débutant en PHP et l'une des applications qui m'a poussé à m'y mettre, c'est le fait de pouvoir faire des redirections du genre "
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|