Accueil > > > TRACE DES ERREURS EN PHP
TRACE DES ERREURS EN PHP
Information sur la source
Description
Bonjour, Ci-joint un exemple permettant de voir un trace des fonctions qui ont abouti à une erreur. Le trace est écrit dans le fichier "Trace.log" du répertoire courrant. Cet exemple est opérationnel avec php5. Pour le rendre opérationnel avec php4, il est nécessaire de modifier les balise /*#V5*/ par /*#V5__ et /*#V4__ par /*#V4*/. La class Obj_Trace est la classe qui gère l'écriture des fonctions appelées ainsi que les valeurs des différents paramètres. La class Obj_GetObject permet d'accéder à toutes les attributs private ou protected des class dérivées de Obj_GetObject. En fin de script, un exemple permet de tester ce script (division par zéro)
Source
- <?php
- // TestError.php
- // "/*#V5__", 0 //debut commentaire si (V4)
- // "/*#V5*/", 1 //debut instruction si (V5)
- // "/*#V4*/", 2 //fin commentaire si (V4)
- // "/*#V4__", 3 //debut commentaire si (V5)
- // "/*#V*/", 4 //fin instruction et fin commentaire si (V4) ou (V5)
- // POUR PASSER EN VERSION 5 (plus utile que réaliser un programme qui génère du code
- // en fonction des #IFDEF et autres
- //
- //si version 5 le constructeur doit etre __construct($Name1,$Value1)
- // le destructeur doit etre __destruct()
- // le constructeur et le destructeur V4 sont acceptés
- // les variables sont soit 'var', 'private', 'protected'
- // si "private" les variables ne sont accessibles que dans la classe
- // si "protected" les variables sont accessibles par les classes dérivées
- // si "var" les variables sont toujours accessibles
- //si version 4 le constructeur doit avoir le meme nom que la class ex: NameClass()
- // le destructeur doit avoir le meme nom que la class précédéavec '_' ex: _NameClass()
- // les variables sont toutes 'var'
- // DefError_V# # est soit 4 ou 5
- //SI !isset($_SERVER['SERVER_NAME']) || $_SERVER['SERVER_NAME'] === 'localhost' => Le script est lancé avec PHPEdit
- //DANS CE CAS LA DIRECTIVE 'include_path' contient les path des fichiers
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- class Obj_Trace
- {
- /*#V5*/ static private /*#V4__ var /*#V*/ $TraceNameFile = "Trace.log";
- /*#V5*/ static public /*#V4__ var /*#V*/ $TraceHandle = 0;
- /*#V5*/ static public /*#V4__ var /*#V*/ $TraceStatus = TRUE;
- //---------------------------------------------------------------------------
- /*#V5*/ static /*#V*/ function OpenFileTrace()
- { /*#V5*/ self::$TraceHandle /*#V4__ $this->TraceHandle /*#V*/ =
- fopen(/*#V5*/ self::$TraceNameFile /*#V4__ $this->TraceFullNameFile /*#V*/ ,"at");
- if (! /*#V5*/ self::$TraceHandle /*#V4__ $this->TraceHandle /*#V*/)
- { /*#V5*/ self::$TraceStatus /*#V4__ $this->TraceStatus /*#V*/ = FALSE;
- trigger_error("File '"./*#V5*/ self::$TraceNameFile /*#V4__ $this->TraceFullNameFile /*#V*/.
- "' ne peut être ouvert en mode append!", _FATAL_ERROR_);
- }
- }
- //---------------------------------------------------------------------------
- /*#V5*/ static /*#V*/ function CloseFileTrace()
- { if (/*#V5*/ self::$TraceStatus /*#V4__ $this->TraceStatus /*#V*/ === TRUE)
- fclose(/*#V5*/ self::$TraceHandle /*#V4__ $this->TraceHandle /*#V*/);
- }
- //---------------------------------------------------------------------------
- /*#V5*/ static /*#V*/ function WriteLineTrace($Line)
- { if (/*#V5*/ self::$TraceStatus /*#V4__ $this->TraceStatus /*#V*/ === TRUE)
- { if (($Size = fwrite (/*#V5*/ self::$TraceHandle /*#V4__ $this->TraceHandle /*#V*/ , $Line, strlen($Line))) <= 0)
- { /*#V5*/ self::$TraceStatus /*#V4__ $this->TraceStatus /*#V*/ = FALSE;
- trigger_error("'"./*#V5*/ self::$TraceNameFile /*#V4__ $this->TraceFullNameFile /*#V*/.
- "' ne peut être écrit!", _FATAL_ERROR_);
- }
- }
- }
- //---------------------------------------------------------------------------
- /*#V5*/ static /*#V*/ function GetVar($Line, $Var, $bFirst = FALSE)
- { switch (gettype($Var))
- {
- case 'integer':
- case 'double':
- return $Var;
- case 'string':
- return '"'.str_replace( array("\x00", "\x0a", "\x0d", "\x1a", "\x09"),
- array('\0', '\n', '\r', '\Z', '\t'), $Var ).'"';
- case 'array':
- $VarNew = $Var;
- case 'object':
- if ($bFirst === TRUE)
- { $LineCurrent = (gettype($Var) === 'object') ?
- $Line."object '".get_class($Var)."' [" : $Line."array (";
- /*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $LineCurrent);
- }
- if (gettype($Var) === 'object')
- { // TEST SI OBJECT CONTIENT LA METHODE 'MyGetArray' qui permet
- // l'accès aux variables private, protected et public avec leurs noms
- // SOIT if (is_callable(array($Var,"MyGetArray")))
- // bool is_callable ( mixed var , bool syntax_only , string callable_name )
- // is_callable vérifie qu'une variable peut être appelée comme fonction.
- // Cette fonction peut vérifier qu'une variable contient un nom de fonction valide,
- // ou bien qu'elle contient un tableau, avec un objet et un nom de méthode.
-
- // SOIT if (in_array("MyGetArray",get_class_methods($Var)))
- // array get_class_methods(string class_name )
- // get_class_methods retourne un tableau contenant les noms des méthodes de la classe class_name.
- // ON ESSAYE LES DEUX CAR get_class_methods peut etre infructueux
- if (in_array("MyGetArray",get_class_methods($Var)))
- { $VarNew = $Var->MyGetArray(); }
- else
- { if (is_callable(array($Var,"MyGetArray")))
- { $VarNew = $Var->MyGetArray(); }
- else
- { //NE RETOURNE QUE LES ATTRIBUTS 'PUBLIC'
- $VarNew = get_object_vars($Var);
- }
- }
- }
- $Line = $Line. " ";
- foreach($VarNew as $Key => $Val)
- { $LineCurrent = $Line;
- $LineCurrent .= /*#V5*/ self::GetVar( /*#V4__ $this->GetVar( /*#V*/ $Line, $Key)." => ";
- if (!is_object($Val) && !is_array($Val))
- { $LineCurrent .= /*#V5*/ self::GetVar( /*#V4__ $this->GetVar( /*#V*/ $Line, $Val);
- /*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $LineCurrent);
- }
- else
- {
- $LineCurrent .= (is_array($Val))? "array (" : "object '".get_class($Val)."' [";
- /*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $LineCurrent);
- /*#V5*/ self::GetVar( /*#V4__ $this->GetVar( /*#V*/ $Line, $Val);
- }
- }
- if (is_array($Var) || is_object($Var))
- { $LineCurrent = (is_array($Var)) ? " )" : " ]";
- /*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $LineCurrent);
- }
- return;
- case 'resource':
- return "Resource(".strstr($Var, "#").")";
- case 'boolean':
- return $Var ? "True" : "False";
- case 'NULL':
- return "null";
- default:
- return "Unknown";
- }
- }
- //---------------------------------------------------------------------------
- /* PROBLEME AVEC PHPEDIT bug
- + function: unknown ( )
- ++'dbg_eval()' => line : 1
- ++ function: MonitoringError (
- ++ 8
- ++ "Undefined variable: this"
- ++ "dbg_eval()"
- ++ 1
- ++ array (
- */
- /*#V5*/ static /*#V*/ function WriteTrace($BackTrace, $NumError, $StringError, $Script, $Ligne)
- {
- $bBugError = FALSE;
- /*#V5*/ self::OpenFileTrace( /*#V4__ $this->OpenFileTrace( /*#V*/ );
- if (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] !== 'localhost')
- { $Line = "\n\n".Date("d/m/Y H:i:s");
- /*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
- }
- $Line ="";
- for ( $bBugError = FALSE, $Space = "", $i = count($BackTrace) - 1; $i >= 0 && $bBugError === FALSE ; $i--)
- { $Space .= "+";
- $Line = "\n".$Space;
- $LineMatrice = $Line;
- if (isset($BackTrace[$i]["file"]))
- $Line .= "'".$BackTrace[$i]["file"]."'";
- if (isset($BackTrace[$i]["line"]))
- $Line .= " => line : ".$BackTrace[$i]["line"];
- if ($Line != $LineMatrice)
- { if (strtolower($BackTrace[$i]["file"]) === "dbg_eval()" && $BackTrace[$i]["line"] === 1)
- { $bBugError = TRUE;
- $Line .= " [bug avec PhpEdit1-8]";
- }
- /*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
- if ($bBugError === TRUE)
- continue;
- }
- $Function ="";
- if (isset($BackTrace[$i]["function"]))
- { $Function = $BackTrace[$i]["function"];
- if ( $Function == 'include' || $Function == 'require' ||
- $Function == 'include_once' || $Function == 'require_once' )
- $Function = "";
- }
- if ($Function === "")
- continue;
- if (strtolower($Function) === "monitoringerror")
- break;
- $Line = $LineMatrice;
- $Line .= " function: ".$Function ." ( ";
- /*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
- if(isset( $BackTrace[$i]['args'][0]))
- { $Virgule = " ";
- foreach( $BackTrace[$i]['args'] as $Arg )
- { if (empty($Arg) && $Arg !== 0)
- continue;
- $Line = $LineMatrice." ";
- $Line .= $Virgule./*#V5*/ self::GetVar( /*#V4__ $this->GetVar( /*#V*/ $Line, $Arg, TRUE);
- $Virgule = ",";
- /*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
- }
- }
- $Line = $LineMatrice." ".")";
- /*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
- }
- $Line = "\n Error: ".$NumError." '".$StringError."' on script '".$Script."' line :".$Ligne;
- /*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
- /*#V5*/ self::CloseFileTrace( /*#V4__ $this->CloseFileTrace( /*#V*/ );
- return $bBugError;
- }
- //---------------------------------------------------------------------------
- }
- //--------------------------------------------------------------------------------------------
- //TRAITEMENT DES ERREURS
- define ("_FATAL_ERROR_", E_USER_ERROR);
- define ("_WARNING_ERROR_", E_USER_WARNING);
- define ("_ALERT_ERROR_", E_USER_NOTICE);
-
- // Creation objet ExObj_Trace en place de la class static Obj_Trace pour compatibilite avec php 4
- /*#V4__ $ExObj_Trace = new Obj_Trace; /*#V*/
- error_reporting (_FATAL_ERROR_ | _WARNING_ERROR_ | _ALERT_ERROR_);
- $ErrorMonitoring = set_error_handler("MonitoringError");
- /*
- ini_set ('track_errors', TRUE);
- ini_set ( "display_errors","off");
- ini_set ( "log_errors","on");
- ini_set ( "log_error_max_len","1024");
- ini_set ( "track_errors","off");
- ini_set ( "error_log","./log/php-error.log");
- */
- //--------------------------------------------------------------------------------------------
- function MonitoringError($NumError, $MsgError, $Script, $Line)
- {
- $StringError = "<u>Numéro :</u> ".$NumError."<u> Message :</u> ".$MsgError
- . "<br><u>Fichier :</u> ".$Script."<u> line :</u> ". $Line;
-
- $BackTrace = debug_backtrace();
- if ( /*#V5*/ Obj_Trace::$TraceStatus /*#V4__ $GLOBALS["ExObj_Trace"]->TraceStatus /*#V*/ === TRUE)
- { $bBugError = /*#V5*/ Obj_Trace::WriteTrace( /*#V4__ $GLOBALS["ExObj_Trace"]->WriteTrace( /*#V*/
- $BackTrace, $NumError, $MsgError, $Script, $Line);
- if ($bBugError === TRUE)
- return;
- }
- switch ($NumError)
- {
- case _FATAL_ERROR_:
- echo "<h3 style='color:#FF0000'>Erreur <i>E_USER_ERROR</i> :</h3>".$StringError;
- exit -1;
- break;
-
- case _WARNING_ERROR_:
- echo "<h3 style='color:#FF0000'>Erreur <i>E_USER_WARNING</i> :</h3>".$StringError;
- break;
-
- case _ALERT_ERROR_:
- echo "<br> Erreur <i>E_USER_NOTICE</i> :".$StringError;
- break;
-
- default:
- echo "<h3 style='color:#FF0000'>Erreur inconnue :</h3>".$StringError;
- break;
- }
- }
- //--------------------------------------------------------------------------------------------
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- //Cette class permet de voir tous les attributs de la classe (private, protected et public
- class Obj_GetObject
- {
- /*#V5*/ public /*#V4__ var /*#V*/ $bGetObject;
-
- //Constructeur necessaire sinon peut provoquer une erreur
- function /*#V5*/ __construct( /*#V4__ Obj_GetObject( /*#V*/ )
- { $this->bGetObject = TRUE; }
-
- //permet de voir meme les private et les protected
- /*#V5*/ public /*#V*/ function MyGetArray()
- {
- return get_object_vars($this);
- }
-
- }
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- class TestErreur extends Obj_GetObject
- {
- private $a1;
- private $a2;
- private $a3;
-
- function /*#V5*/ __construct( /*#V4__ Obj_GetObject( /*#V*/ )
- { // ----- APPEL CONSTRUCTEUR Obj_GetObject -----
- /*#V5*/ parent::__construct( /*#V4__ parent::Obj_GetObject( /*#V*/);
- $this->a1 = 200;
- $this->a2 = 300;
- $this->a3 = array ("un"=> 1, "deux"=>2);
- }
- /*#V5*/ private /*#V*/function Un($var)
- { $this->a1/=$var;
- }
- /*#V5*/ private /*#V*/function Deux($var)
- { $this->a1+=$var;
- $this->Un($var);
- }
- /*#V5*/ public /*#V*/function Trois($var)
- { $this->Deux($var);
- }
- }
- //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- function Calcul($V,$W)
- {
- $V->Trois($W);
- }
-
- //test
- $Obj = new TestErreur;
- Calcul($Obj,0);
- ?>
<?php
// TestError.php
// "/*#V5__", 0 //debut commentaire si (V4)
// "/*#V5*/", 1 //debut instruction si (V5)
// "/*#V4*/", 2 //fin commentaire si (V4)
// "/*#V4__", 3 //debut commentaire si (V5)
// "/*#V*/", 4 //fin instruction et fin commentaire si (V4) ou (V5)
// POUR PASSER EN VERSION 5 (plus utile que réaliser un programme qui génère du code
// en fonction des #IFDEF et autres
//
//si version 5 le constructeur doit etre __construct($Name1,$Value1)
// le destructeur doit etre __destruct()
// le constructeur et le destructeur V4 sont acceptés
// les variables sont soit 'var', 'private', 'protected'
// si "private" les variables ne sont accessibles que dans la classe
// si "protected" les variables sont accessibles par les classes dérivées
// si "var" les variables sont toujours accessibles
//si version 4 le constructeur doit avoir le meme nom que la class ex: NameClass()
// le destructeur doit avoir le meme nom que la class précédéavec '_' ex: _NameClass()
// les variables sont toutes 'var'
// DefError_V# # est soit 4 ou 5
//SI !isset($_SERVER['SERVER_NAME']) || $_SERVER['SERVER_NAME'] === 'localhost' => Le script est lancé avec PHPEdit
//DANS CE CAS LA DIRECTIVE 'include_path' contient les path des fichiers
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class Obj_Trace
{
/*#V5*/ static private /*#V4__ var /*#V*/ $TraceNameFile = "Trace.log";
/*#V5*/ static public /*#V4__ var /*#V*/ $TraceHandle = 0;
/*#V5*/ static public /*#V4__ var /*#V*/ $TraceStatus = TRUE;
//---------------------------------------------------------------------------
/*#V5*/ static /*#V*/ function OpenFileTrace()
{ /*#V5*/ self::$TraceHandle /*#V4__ $this->TraceHandle /*#V*/ =
fopen(/*#V5*/ self::$TraceNameFile /*#V4__ $this->TraceFullNameFile /*#V*/ ,"at");
if (! /*#V5*/ self::$TraceHandle /*#V4__ $this->TraceHandle /*#V*/)
{ /*#V5*/ self::$TraceStatus /*#V4__ $this->TraceStatus /*#V*/ = FALSE;
trigger_error("File '"./*#V5*/ self::$TraceNameFile /*#V4__ $this->TraceFullNameFile /*#V*/.
"' ne peut être ouvert en mode append!", _FATAL_ERROR_);
}
}
//---------------------------------------------------------------------------
/*#V5*/ static /*#V*/ function CloseFileTrace()
{ if (/*#V5*/ self::$TraceStatus /*#V4__ $this->TraceStatus /*#V*/ === TRUE)
fclose(/*#V5*/ self::$TraceHandle /*#V4__ $this->TraceHandle /*#V*/);
}
//---------------------------------------------------------------------------
/*#V5*/ static /*#V*/ function WriteLineTrace($Line)
{ if (/*#V5*/ self::$TraceStatus /*#V4__ $this->TraceStatus /*#V*/ === TRUE)
{ if (($Size = fwrite (/*#V5*/ self::$TraceHandle /*#V4__ $this->TraceHandle /*#V*/ , $Line, strlen($Line))) <= 0)
{ /*#V5*/ self::$TraceStatus /*#V4__ $this->TraceStatus /*#V*/ = FALSE;
trigger_error("'"./*#V5*/ self::$TraceNameFile /*#V4__ $this->TraceFullNameFile /*#V*/.
"' ne peut être écrit!", _FATAL_ERROR_);
}
}
}
//---------------------------------------------------------------------------
/*#V5*/ static /*#V*/ function GetVar($Line, $Var, $bFirst = FALSE)
{ switch (gettype($Var))
{
case 'integer':
case 'double':
return $Var;
case 'string':
return '"'.str_replace( array("\x00", "\x0a", "\x0d", "\x1a", "\x09"),
array('\0', '\n', '\r', '\Z', '\t'), $Var ).'"';
case 'array':
$VarNew = $Var;
case 'object':
if ($bFirst === TRUE)
{ $LineCurrent = (gettype($Var) === 'object') ?
$Line."object '".get_class($Var)."' [" : $Line."array (";
/*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $LineCurrent);
}
if (gettype($Var) === 'object')
{ // TEST SI OBJECT CONTIENT LA METHODE 'MyGetArray' qui permet
// l'accès aux variables private, protected et public avec leurs noms
// SOIT if (is_callable(array($Var,"MyGetArray")))
// bool is_callable ( mixed var , bool syntax_only , string callable_name )
// is_callable vérifie qu'une variable peut être appelée comme fonction.
// Cette fonction peut vérifier qu'une variable contient un nom de fonction valide,
// ou bien qu'elle contient un tableau, avec un objet et un nom de méthode.
// SOIT if (in_array("MyGetArray",get_class_methods($Var)))
// array get_class_methods(string class_name )
// get_class_methods retourne un tableau contenant les noms des méthodes de la classe class_name.
// ON ESSAYE LES DEUX CAR get_class_methods peut etre infructueux
if (in_array("MyGetArray",get_class_methods($Var)))
{ $VarNew = $Var->MyGetArray(); }
else
{ if (is_callable(array($Var,"MyGetArray")))
{ $VarNew = $Var->MyGetArray(); }
else
{ //NE RETOURNE QUE LES ATTRIBUTS 'PUBLIC'
$VarNew = get_object_vars($Var);
}
}
}
$Line = $Line. " ";
foreach($VarNew as $Key => $Val)
{ $LineCurrent = $Line;
$LineCurrent .= /*#V5*/ self::GetVar( /*#V4__ $this->GetVar( /*#V*/ $Line, $Key)." => ";
if (!is_object($Val) && !is_array($Val))
{ $LineCurrent .= /*#V5*/ self::GetVar( /*#V4__ $this->GetVar( /*#V*/ $Line, $Val);
/*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $LineCurrent);
}
else
{
$LineCurrent .= (is_array($Val))? "array (" : "object '".get_class($Val)."' [";
/*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $LineCurrent);
/*#V5*/ self::GetVar( /*#V4__ $this->GetVar( /*#V*/ $Line, $Val);
}
}
if (is_array($Var) || is_object($Var))
{ $LineCurrent = (is_array($Var)) ? " )" : " ]";
/*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $LineCurrent);
}
return;
case 'resource':
return "Resource(".strstr($Var, "#").")";
case 'boolean':
return $Var ? "True" : "False";
case 'NULL':
return "null";
default:
return "Unknown";
}
}
//---------------------------------------------------------------------------
/* PROBLEME AVEC PHPEDIT bug
+ function: unknown ( )
++'dbg_eval()' => line : 1
++ function: MonitoringError (
++ 8
++ "Undefined variable: this"
++ "dbg_eval()"
++ 1
++ array (
*/
/*#V5*/ static /*#V*/ function WriteTrace($BackTrace, $NumError, $StringError, $Script, $Ligne)
{
$bBugError = FALSE;
/*#V5*/ self::OpenFileTrace( /*#V4__ $this->OpenFileTrace( /*#V*/ );
if (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] !== 'localhost')
{ $Line = "\n\n".Date("d/m/Y H:i:s");
/*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
}
$Line ="";
for ( $bBugError = FALSE, $Space = "", $i = count($BackTrace) - 1; $i >= 0 && $bBugError === FALSE ; $i--)
{ $Space .= "+";
$Line = "\n".$Space;
$LineMatrice = $Line;
if (isset($BackTrace[$i]["file"]))
$Line .= "'".$BackTrace[$i]["file"]."'";
if (isset($BackTrace[$i]["line"]))
$Line .= " => line : ".$BackTrace[$i]["line"];
if ($Line != $LineMatrice)
{ if (strtolower($BackTrace[$i]["file"]) === "dbg_eval()" && $BackTrace[$i]["line"] === 1)
{ $bBugError = TRUE;
$Line .= " [bug avec PhpEdit1-8]";
}
/*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
if ($bBugError === TRUE)
continue;
}
$Function ="";
if (isset($BackTrace[$i]["function"]))
{ $Function = $BackTrace[$i]["function"];
if ( $Function == 'include' || $Function == 'require' ||
$Function == 'include_once' || $Function == 'require_once' )
$Function = "";
}
if ($Function === "")
continue;
if (strtolower($Function) === "monitoringerror")
break;
$Line = $LineMatrice;
$Line .= " function: ".$Function ." ( ";
/*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
if(isset( $BackTrace[$i]['args'][0]))
{ $Virgule = " ";
foreach( $BackTrace[$i]['args'] as $Arg )
{ if (empty($Arg) && $Arg !== 0)
continue;
$Line = $LineMatrice." ";
$Line .= $Virgule./*#V5*/ self::GetVar( /*#V4__ $this->GetVar( /*#V*/ $Line, $Arg, TRUE);
$Virgule = ",";
/*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
}
}
$Line = $LineMatrice." ".")";
/*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
}
$Line = "\n Error: ".$NumError." '".$StringError."' on script '".$Script."' line :".$Ligne;
/*#V5*/ self::WriteLineTrace( /*#V4__ $this->WriteLineTrace( /*#V*/ $Line);
/*#V5*/ self::CloseFileTrace( /*#V4__ $this->CloseFileTrace( /*#V*/ );
return $bBugError;
}
//---------------------------------------------------------------------------
}
//--------------------------------------------------------------------------------------------
//TRAITEMENT DES ERREURS
define ("_FATAL_ERROR_", E_USER_ERROR);
define ("_WARNING_ERROR_", E_USER_WARNING);
define ("_ALERT_ERROR_", E_USER_NOTICE);
// Creation objet ExObj_Trace en place de la class static Obj_Trace pour compatibilite avec php 4
/*#V4__ $ExObj_Trace = new Obj_Trace; /*#V*/
error_reporting (_FATAL_ERROR_ | _WARNING_ERROR_ | _ALERT_ERROR_);
$ErrorMonitoring = set_error_handler("MonitoringError");
/*
ini_set ('track_errors', TRUE);
ini_set ( "display_errors","off");
ini_set ( "log_errors","on");
ini_set ( "log_error_max_len","1024");
ini_set ( "track_errors","off");
ini_set ( "error_log","./log/php-error.log");
*/
//--------------------------------------------------------------------------------------------
function MonitoringError($NumError, $MsgError, $Script, $Line)
{
$StringError = "<u>Numéro :</u> ".$NumError."<u> Message :</u> ".$MsgError
. "<br><u>Fichier :</u> ".$Script."<u> line :</u> ". $Line;
$BackTrace = debug_backtrace();
if ( /*#V5*/ Obj_Trace::$TraceStatus /*#V4__ $GLOBALS["ExObj_Trace"]->TraceStatus /*#V*/ === TRUE)
{ $bBugError = /*#V5*/ Obj_Trace::WriteTrace( /*#V4__ $GLOBALS["ExObj_Trace"]->WriteTrace( /*#V*/
$BackTrace, $NumError, $MsgError, $Script, $Line);
if ($bBugError === TRUE)
return;
}
switch ($NumError)
{
case _FATAL_ERROR_:
echo "<h3 style='color:#FF0000'>Erreur <i>E_USER_ERROR</i> :</h3>".$StringError;
exit -1;
break;
case _WARNING_ERROR_:
echo "<h3 style='color:#FF0000'>Erreur <i>E_USER_WARNING</i> :</h3>".$StringError;
break;
case _ALERT_ERROR_:
echo "<br> Erreur <i>E_USER_NOTICE</i> :".$StringError;
break;
default:
echo "<h3 style='color:#FF0000'>Erreur inconnue :</h3>".$StringError;
break;
}
}
//--------------------------------------------------------------------------------------------
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//Cette class permet de voir tous les attributs de la classe (private, protected et public
class Obj_GetObject
{
/*#V5*/ public /*#V4__ var /*#V*/ $bGetObject;
//Constructeur necessaire sinon peut provoquer une erreur
function /*#V5*/ __construct( /*#V4__ Obj_GetObject( /*#V*/ )
{ $this->bGetObject = TRUE; }
//permet de voir meme les private et les protected
/*#V5*/ public /*#V*/ function MyGetArray()
{
return get_object_vars($this);
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class TestErreur extends Obj_GetObject
{
private $a1;
private $a2;
private $a3;
function /*#V5*/ __construct( /*#V4__ Obj_GetObject( /*#V*/ )
{ // ----- APPEL CONSTRUCTEUR Obj_GetObject -----
/*#V5*/ parent::__construct( /*#V4__ parent::Obj_GetObject( /*#V*/);
$this->a1 = 200;
$this->a2 = 300;
$this->a3 = array ("un"=> 1, "deux"=>2);
}
/*#V5*/ private /*#V*/function Un($var)
{ $this->a1/=$var;
}
/*#V5*/ private /*#V*/function Deux($var)
{ $this->a1+=$var;
$this->Un($var);
}
/*#V5*/ public /*#V*/function Trois($var)
{ $this->Deux($var);
}
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function Calcul($V,$W)
{
$V->Trois($W);
}
//test
$Obj = new TestErreur;
Calcul($Obj,0);
?>
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Erreur: parse error unexpected $end [ par rouliendelavegas ]
BonjourParse error: syntax error, unexpected $end in Voila l'erreur que j'ai en executant ma page licence.php , qui inclut le fichier function_licence
Retour session [ par DarkSchneider ]
Salut tout le monde.Cette fois, ce sont les sessions qui m'amènent ici. Voilà mon problème. Je dispose de 3 pages, disons index.php, 1.php et 2. phpSu
Problème error_log [ par Bestgamer ]
bonjour,J'ai un problème avec la fonction error_log. J'ai fait une fonction pour gérer les messages d'erreurs mais la fonction error_log n'e
passage de variable dans un lien [ par jimmypage64 ]
Bonjour . Je voudrai passer une variable d'une page a une autre par un lien.mon code est le suivant.. pour la premiere page : <?php echo '<a hr
Erreur mysql_connect(): Too many connections [ par richarddum ]
Bonjour,Le message suivant "Warning: mysql_connect(): Too many connections in ..." apparait quelque fois sur mon site qui utilise une base de don
Erreur mysql Impissible de trouver où est el problème [ par Optitech ]
Slt !Cela fiat une geure que je suis en trains de me caser la tête sur un script ! Dans j'ai une requette la voila :INSERT INTO visitespage (jour
mysql et numéro d'erreur [ par jackrichard ]
Bonjour a tous J'ai déjà fait du pro*c (du C++ qui intervient sur une base oracle) et en cas d'erreur avec le sql il me retouné un
erreur incompréhensible [ par chamallow ]
Faut croire que tout a décidé de planter maintenant!Alors, on y va :)J'ai un fichier qui vérifie mon authentification (les mots de pass
$menu= erreur [ par spaa05 ]
bonsoirj'ai un menu en flash est 2 page phpmenu.php<?php$menu"<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://down
test sur formulaire...ca marche pas....AIDEZ-MOI SVP!!! [ par neji_44 ]
Salut ca fait deux semaine que je suis sur cette page, et j'en peux plus j'ai essayer de résoudre le problème avec toutes mes connaissance (
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
CHAMPS TIMECHAMPS TIME par vargas
Cliquez pour lire la suite par vargas
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|