Momenteel de meest gebruikte internet ontwikkeld taal is PHP. Dit is gratis (open source) en maakt het mogelijk complexe websites te bouwen. Bij het ontwikkelen hiervan kan het oplossen van fouten een langdurig werkje zijn. Hiervoor is het handig om een middel te hebben dat snel en overzichtelijk alle fouten opsomt, inclusief de regel waar het plaats vond en het type fout.
De code kun je downloaden, en op je server zetten. Daarna includen in je source mbv het include commando
<?php
error_reporting(E_ALL);
set_error_handler( "error_handler" );
$cfg['php'] = true; // Het php script gedeelte weergeven? true=ja,false=nee
$cfg['opmaak'] = true; // Met opmaak of platte tekst, true=met opmaak,false= zonder
$cfg['regel'] = 5; // Hoeveel regels voor en bij php
define("NL","\n<br />");
// Hier start de functie
function error_handler($errno, $errmsg, $errfile, $errline, $vars) {
global $cfg;
// Nummer -> Text
$errors = array(
1=>'E_ERROR',
2=>'E_WARNING',
4=>'E_PARSE',
8=>'E_NOTICE',
16=>'E_CORE_ERROR',
32=>'E_CORE_WARNING',
64=>'E_COMPILE_ERROR',
128=>'E_COMPILE_WARNING',
256=>'E_USER_ERROR',
512=>'E_USER_WARNING',
1024=>'E_USER_NOTICE');
// Nummer(type) -> Simpele str
$err = array(
E_ERROR => "Error",
E_WARNING => "Warning",
E_PARSE => "Parsing Error",
E_NOTICE => "Notice",
E_CORE_ERROR => "Core Error",
E_CORE_WARNING => "Core Warning",
E_COMPILE_ERROR => "Compile Error",
E_COMPILE_WARNING => "Compile Warning",
E_USER_ERROR => "User Error",
E_USER_WARNING => "User Warning",
E_USER_NOTICE => "User Notice",
E_STRICT => "Runtime Notice");
// Start bericht
$msg = '';
if($cfg['opmaak'] == true) {
$msg .= '<div style="border: 1px solid #999;font-family:Verdana, Arial, Helvetica, sans-serif;font-size: 12px;"><div style="background: #999; color: #fff;">Error</div>';
$msg .= '<p style="padding: 5px;">';
}
$msg .= 'Error_date: '.date("m-d-Y H:i:s O").NL;
$msg .= 'Error_type: '.$errors[$errno].NL;
$msg .= 'Error_file: '.$errfile.NL;
$msg .= 'Error_line: '.$errline.NL;
$msg .= 'Error_msg: '.$errmsg.NL;
$msg .= 'Client_uri: '.$_SERVER['REQUEST_URI'].NL;
$msg .= 'Client_user-agent: '.$_SERVER['HTTP_USER_AGENT'].NL;
$msg .= 'Server_host: '.$_SERVER['HTTP_HOST'].NL;
if(isset($_SERVER['HTTP_REFERER'])) {
$msg .= 'Client_referer: '.$_SERVER['HTTP_REFERER'].NL;
}
// Simpele bericht, lijkt op de errors die php maakt
$msg .= 'Error_simpel: <b>'.$err[$errno].':</b> '.$errmsg.' In <b>'.$errfile.'</b> On line <b>'.$errline.'</b>'.NL;
// De dingen voor de : dik gedrukt maken
if($cfg['opmaak'] == true) {
$msg = preg_replace('#([A-Z]{1}[a-zA-Z_-]{2,})\:(.*?)#','<strong>$1</strong>:$2',$msg);
}
// Je kan alleen php doen als Opmaak ook mag. anders kan het niet
if($cfg['php'] == true && $cfg['opmaak'] == true) {
// Tabel voor php met lijn nummers
$file = file($errfile);
// Begin regel bepalen, kan geen min regels maken
$beg = ($errline-$cfg['regel'] < 0) ? 0 : $errline-$cfg['regel'];
// De regel mag niet boven het aantal regels uitkomen
$eind = ($errline+$cfg['regel'] > count($file)) ? count($file) : $errline+$cfg['regel'];
$str = '';
// Regels uitlezen, voor en na
for($i=$beg;$i<$eind;$i++) {
$str .= $file[$i];
}
// Opmaak
$msg .= '<br /><table style="line-height: 15px;font-size:12px;border: 1px solid #999;"cellspacing=0 cellpadding=0><tr><td colspan="2" style="text-align:center;border-bottom: 1px solid #999; background: #ececec;">Script, line: '.$errline.'</td></tr><tr><td style="border-right: 1px solid #999; background: #ececec;" valign="top">';
// Regel nummers
for($i=$beg-1;$i<$eind;$i++) {
if($errline == $i) { // Dik maken als het de error regel is
$msg.= '<b>'.$i.'</b>'.NL;
} else {
$msg.= $i.NL;
}
}
// Highlighten, en de <?php en ? > weghalen, omdat het wel met kleurtjes moet
$hig = highlight_string("<?php\n\n" .$str.' ?>',true);
$hig = preg_replace (array ( '/.*<code>\s*<span style="color: #000000">/','#</span>\s*</code>#','#\?>#s','#<\?php#si','/<span[^>]*><\/span>/'),'',$hig); // Thnx someone from php.net
// Weergeven
$msg .= '</td><td valign="top" style="width: 700px;">';
$msg .= $hig;
$msg .= '</td></tr></table>';
}
if($cfg['opmaak'] == true) {
$msg .= '</p></div></div><br />';
}
// Hier kan je wat met de berichten gaan doen, mailer of in de database pleuren, dat moet je zelf maar uitzoeken, Output is $msg
echo $msg;
}
set_error_handler('error_handler');
?>