trigger_error
Een tijdje geleden had ik iets gedaan wat me wel slim leek. Op diverse plekken in mijn code gebruik ik trigger_error(). Hiermee kun je een error triggeren:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
if ($er_gaat_iets_gruwelijk_fout === true) {
trigger_error('De poppen aan het dansen!', E_USER_ERROR);
}
?>
if ($er_gaat_iets_gruwelijk_fout === true) {
trigger_error('De poppen aan het dansen!', E_USER_ERROR);
}
?>
Omdat ik de functienaam trigger_error best belachelijk lang vond, heb ik een eigen functie gemaakt:
Nu heb ik dus een aantal weken geleden overal trigger_error gewijzigd in error en het werkt perfect, nou ja... bijna dan. Alles werkt, alleen kwam ik er net pas achter dat de error informatie niet meer klopt. Het bestand en het regelnummer zijn nu van mijn eigen error functie in plaats van het bestand waar ik de error trigger.
Dus in mijn log staat:
[26-Jun-2013 11:27:18 Europe/Amsterdam] PHP Fatal error: 'De poppen aan het dansen! in
/home/pad/naar/bestand/met/eigen/functies.php on line 30
Terwijl het dus zoiets zou moeten zijn:
[26-Jun-2013 11:27:18 Europe/Amsterdam] PHP Fatal error: 'De poppen aan het dansen! in
/home/pad/naar/bestand/waar/het/misgaat.php on line 100
Iemand misschien een idee of/hoe ik dit kan fixen?
(Mocht het niet duidelijk zijn wat ik bedoel, laat het dan even weten dan probeer ik het nog duidelijker uit te leggen.)
Gewijzigd op 26/06/2013 13:26:12 door Ozzie PHP
Is het niet beter/mooier om een exception te gooien?
Dat kan, maar is nu even niet aan de orde. Ik wil graag weten of dit probleem is op te lossen, en zo ja... hoe?
error('De poppen aan het dansen in '.__FILE__.' op line '.__LINE__, E_USER_ERROR);
Ik zoek iets handigers.
Je zou dan je eigen error handler moeten schrijven.
Code (php)
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
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
<?php
function error($message, $level) {
$error = debug_backtrace();
switch ($level) {
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
$error_type_str = "Fatal error";
break;
case E_RECOVERABLE_ERROR:
$error_type_str = "Catchable fatal error";
break;
case E_WARNING:
case E_CORE_WARNING:
case E_COMPILE_WARNING:
case E_USER_WARNING:
$error_type_str = "Warning";
break;
case E_PARSE:
$error_type_str = "Parse error";
break;
case E_NOTICE:
case E_USER_NOTICE:
$error_type_str = "Notice";
break;
case E_STRICT:
$error_type_str = "Strict Standards";
break;
case E_DEPRECATED:
case E_USER_DEPRECATED:
$error_type_str = "Deprecated";
break;
}
echo '<br /><b>' . $error_type_str . '</b>: ' . $message . ' in <b>' . $error[0]['file'] . '</b> on line <b>' . $error[0]['line'] . '</b><br />';
@trigger_error($message, $level);
}
?>
function error($message, $level) {
$error = debug_backtrace();
switch ($level) {
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
$error_type_str = "Fatal error";
break;
case E_RECOVERABLE_ERROR:
$error_type_str = "Catchable fatal error";
break;
case E_WARNING:
case E_CORE_WARNING:
case E_COMPILE_WARNING:
case E_USER_WARNING:
$error_type_str = "Warning";
break;
case E_PARSE:
$error_type_str = "Parse error";
break;
case E_NOTICE:
case E_USER_NOTICE:
$error_type_str = "Notice";
break;
case E_STRICT:
$error_type_str = "Strict Standards";
break;
case E_DEPRECATED:
case E_USER_DEPRECATED:
$error_type_str = "Deprecated";
break;
}
echo '<br /><b>' . $error_type_str . '</b>: ' . $message . ' in <b>' . $error[0]['file'] . '</b> on line <b>' . $error[0]['line'] . '</b><br />';
@trigger_error($message, $level);
}
?>
Het geeft in ieder geval dezelfde message als de normale PHP error handler voor error('De poppen aan het dansen!', E_USER_ERROR);
Toevoeging op 26/06/2013 14:04:22:
Als je dat in een error handler zou zetten zou het zo ongeveer zo zijn:
Code (php)
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
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
<?php
set_error_handler(function($level, $message, $errfile, $errline, $errcontext ) {
$error = debug_backtrace();
var_dump($error);
switch ($level) {
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
$error_type_str = "Fatal error";
break;
case E_RECOVERABLE_ERROR:
$error_type_str = "Catchable fatal error";
break;
case E_WARNING:
case E_CORE_WARNING:
case E_COMPILE_WARNING:
case E_USER_WARNING:
$error_type_str = "Warning";
break;
case E_PARSE:
$error_type_str = "Parse error";
break;
case E_NOTICE:
case E_USER_NOTICE:
$error_type_str = "Notice";
break;
case E_STRICT:
$error_type_str = "Strict Standards";
break;
case E_DEPRECATED:
case E_USER_DEPRECATED:
$error_type_str = "Deprecated";
break;
}
echo '<br /><b>' . $error_type_str . '</b>: ' . $message . ' in <b>' . $error[1]['file'] . '</b> on line <b>' . $error[1]['line'] . '</b><br />';
});
?>
set_error_handler(function($level, $message, $errfile, $errline, $errcontext ) {
$error = debug_backtrace();
var_dump($error);
switch ($level) {
case E_ERROR:
case E_CORE_ERROR:
case E_COMPILE_ERROR:
case E_USER_ERROR:
$error_type_str = "Fatal error";
break;
case E_RECOVERABLE_ERROR:
$error_type_str = "Catchable fatal error";
break;
case E_WARNING:
case E_CORE_WARNING:
case E_COMPILE_WARNING:
case E_USER_WARNING:
$error_type_str = "Warning";
break;
case E_PARSE:
$error_type_str = "Parse error";
break;
case E_NOTICE:
case E_USER_NOTICE:
$error_type_str = "Notice";
break;
case E_STRICT:
$error_type_str = "Strict Standards";
break;
case E_DEPRECATED:
case E_USER_DEPRECATED:
$error_type_str = "Deprecated";
break;
}
echo '<br /><b>' . $error_type_str . '</b>: ' . $message . ' in <b>' . $error[1]['file'] . '</b> on line <b>' . $error[1]['line'] . '</b><br />';
});
?>
Ik heb nog even alle error codes toegevoegd, ze komen direct uit de PHP source :).
Gewijzigd op 26/06/2013 14:11:17 door Koen Vlaswinkel
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
function error_handler($level, $message) {
echo $message;
}
set_error_handler('error_handler');
?>
function error_handler($level, $message) {
echo $message;
}
set_error_handler('error_handler');
?>
Gewijzigd op 26/06/2013 14:07:24 door Wouter J
Wouter J op 26/06/2013 14:06:37:
Het lijkt mij veel te veel moeite voor alleen het verkleinen van de functie.
Ja, dat kun je wel zeggen :-/ Dit was nou ook niet helemaal wat ik in gedachte had. Maar goed, ik kan weer even aan de slag zullen we maar zeggen. Bedankt voor het opzetje!
Ozzie PHP op 26/06/2013 11:41:11:
...Omdat ik de functienaam trigger_error best belachelijk lang vond, ...
Ik vind dat niet. De functienaam vertelt ook perfect wat het doet.
Een functie error() doet dat niet; dat kan van alles betekenen.
Ik vind een langere functienaam trouwens ook geen goed argument.
In deze tijden van copy/paste en editors die auto completen, vind ik een duidelijke naam veel belangrijker dan het ontwijken van een aantal karaters typen.
Kris, dat mag je uiteraard vinden. Ik vind error() wat prettiger. Ieder z'n ding zullen we maar zeggen.