Bonjour,
Est-il possible en php 5 de récupérer (catch) les erreurs php classiques (fatal error, warning, etc) afin de les traiter et les mettre en forme de façon personnalisées?
a+
Bonjour,
Est-il possible en php 5 de récupérer (catch) les erreurs php classiques (fatal error, warning, etc) afin de les traiter et les mettre en forme de façon personnalisées?
a+
oui en utilisant set_error_handler
salut,
Merci pour la solution.
Je comprends l'idée mais ca ne marche pas.
J'ai repris la source sans la modifier. Je l'inclue au tout début de mon fichier php.
Et j'obtiens l'erreur: var: Deprecated. Please use the public/private/protected modifiers.
tu es sur de n'utiliser que ça dans ton fichier ? a priori non puisque le message d'erreur est clair tu as déclaré une variable avec var au lieu de (private, protected, public ) !
essaies de coller ce script dans un fichier vierge et essaies-le, chez moi cela fonctionne à merveille ;-)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156 <?php class MyException extends Exception { /** * Niveau de l'erreur * * @var integer */ protected $level = 0; /** * Code de l'erreur * * @var integer */ protected $code = 0; /** * Description de l'erreur * * @var string */ protected $message; /** * Fichier ou a eu lieu l'erreur * * @var string */ protected $file; /** * Ligne ou a eu lieu l'erreur * * @var integer */ protected $line; /** * Construit l'objet MyException * * @param string $message description de l'erreur * @return void */ public function __construct() { switch (func_num_args()) { case 4 : parent::__construct(func_get_arg(1)); $this->level = (integer) func_get_arg(0); $this->file = (string) func_get_arg(2); $this->line = (integer) func_get_arg(3); break; case 2 : parent::__construct(func_get_arg(0)); $this->code = (integer) func_get_arg(1); break; case 1 : parent::__construct(func_get_arg(0)); } } /** * Retourne le niveau de l'erreur * * @return integer */ function getLevel() { return $this->level; } /** * Retourne le niveau de l'erreur sous forme de chaine * * @return string */ function getLevelAsString() { switch ($this->level) { case E_ERROR : return "E_ERROR"; case E_WARNING : return "E_WARNING"; case E_PARSE : return "E_PARSE"; case E_NOTICE : return "E_NOTICE"; case E_CORE_ERROR : return "E_CORE_ERROR"; case E_CORE_WARNING : return "E_CORE_WARNING"; case E_COMPILE_ERROR : return "E_COMPILE_ERROR"; case E_COMPILE_WARNING : return "E_COMPILE_WARNING"; case E_USER_ERROR : return "E_USER_ERROR"; case E_USER_WARNING : return "E_USER_WARNING"; case E_USER_NOTICE : return "E_USER_NOTICE"; case E_ALL : return "E_ALL"; case E_STRICT : return "E_STRICT"; } } /** * Retourne un resume de l'erreur * * @return string */ public function getSummary() { $string = "<br />\r\n"; $string .= "<strong>Attention</strong> : ".$this->message.".<br />\r\n"; $string .= "Dans le fichier <strong>".$this->file."</strong> à la ligne <strong>".$this->line."</strong>.<br />\r\n"; $string .= "<br />\r\n"; return $string; } } /** * Active MyException a chaque erreur * * @author Gorrk * @return void */ function error_handler($level, $message, $file, $line) { throw new MyException($level, $message, $file, $line); } /** * Active le gestionnaire d'erreurs */ set_error_handler("error_handler"); /** * Affiche un message d'erreur a chaque Exception non rattrapee et arrete le script * * @author Gorrk * @return void */ function exception_handler($exception) { die($exception->getSummary()); } /** * Active le le gestionnaire d'exception */ set_exception_handler("exception_handler"); ////////////////////////////////////////// test //exception classique try { throw new MyException("Erreur de configuration"); } catch (MyException $e) { echo $e->getSummary(); } //avec le gestionnaire d'erreur active set_error_handler("error_handler"); try { $handle = fopen("fichier.txt"); } catch (MyException $e) { echo $e->getSummary(); } ?>
Salut,
Oui en effet j'aurais du prendre le temps de tester ce script seul: il fonctionne bien.Envoyé par ska_root
Mon problème vient apparemment de pear::log et propel. L'appel à la fonction set_error_handler génère cette erreur qui n'apparaît pas sinon.
Du coup je ne peux gérer que des exceptions perso et pas les erreurs php classiques.![]()
Je vais essayer de me renseigner à ce sujet.
Apparemment nombre de packages ne sont pas encore écrits en php 5 stricte et le fait de redéfinir l'"handler" d'erreurs met en évidence le code écrit en php 4.
bon à savoir ;-)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager