I’d like for my site to send me an email any time there is a fatal error. I’ve been trying different things but can’t figure out how to distinguish warnings and notices from errors. Thank you for your help.
Below is the script I’ve written so far that gathers data with a test error trigger at the bottom.
<?php
//set error handler
set_error_handler("customError");
//error handler function
function customError($errno, $errstr, $errfile, $errline) {
/*
* GATHER DATA
*/
switch ($errno) {
case 256:
$error.= "<b>My ERROR</b> [$errno] $errstr<br />\
";
$error.= " Fatal error on line $errline in file $errfile";
$error.= ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\
";
$error.= "Aborting...<br />\
".
",FILE: $errfile, LINE: $errline";
break;
case 512:
$error.= "<b>E_USER_WARNING/b> [$errno] $errstr, FILE: $errfile, LINE: $errline<br />\
";
break;
case 1024:
$error.= "<b>My NOTICE</b> [$errno] $errstr, FILE: $errfile, LINE: $errline.<br />\
";
break;
case 2:
$error.= "<b>E_WARNING</b> [$errno] $errstr, FILE: $errfile, LINE: $errline<br />\
";
break;
case 8:
$error.= "<b>My NOTICE</b> [$errno] $errstr, FILE: $errfile, LINE: $errline<br />\
";
break;
case 4096:
$error.= "<b>E_RECOVERABLE_ERROR</b> [$errno] $errstr, FILE: $errfile, LINE: $errline<br />\
";
break;
default:
$error.= "Unknown error type: [$errno] $errstr, FILE: $errfile, LINE: $errline<br />\
";
break;
}
if($_SERVER){
$server= "<h2>SERVER VARIABLES</h2>";
foreach($_SERVER as $k=>$v){
$server.="<p><strong>$k:</strong> $v</p>";
}
}
if($_GET){
$get= "<h2>GET VARIABLES</h2>";
foreach($_GET as $k=>$v){
$get.="<p><strong>$k:</strong> $v</p>";
}
}
if($_POST){
$post= "<h2>POST VARIABLES</h2>";
foreach($_POST as $k=>$v){
$post.="<p><strong>$k:</strong> $v</p>";
}
}
if($_SESSION){
$session= "<h2>SESSION VARIABLES</h2>";
foreach($_SESSION as $k=>$v){
$session.="<p><strong>$k:</strong> $v</p>";
}
}
echo
"<div style='font-family:arial,verdana;font-size:12px;'>".
$error.$server.$get.$post.$session.
"</div>";
/*
* MAIL ERROR
*/
/*
* REDIRECT PAGE
*/
exit;
}
//trigger error
if($_POST){
$sql="SELECT * FROM table";
mysql_query($sql) or die(mysql_error());
}
?>
<form action='?get_variable=1' method='post'>
<input type='text' value='testing' name='post_variable' />
<input type='submit' />
</form>