Script 8.3 Custom Error Handling

Use set_error_handler() to override the default function when errors occur. Have different output based on whether site is live or in development. If live - send error message to error.log file.

Output

Current Error Reporting Level: 22519

Development Error Display

2024/04/25 09:18:39 - An error occurred in script '/home3/ashliet/public_html/percolate/exercises/8/8.3.php' on line 33: Division by zero

Production Error Display

A system error occurred. Check the log file for more details.

Error Log File

Source
<?php # Script 8.3 
define('LIVE',TRUE);
define('DEV',TRUE);
// Create the error handler:
function my_error_handler ($e_number, $e_message, $e_file, $e_line, $e_vars) {
	// Build the error message:
	$message = date('Y/m/d H:i:s')." - An error occurred in script '$e_file' on line $e_line: $e_message\n";
	
	// Append $e_vars to  $message:
	// $vars = print_r ($e_vars, 1);

	// Append backtrace to message:
	// ob_start();
 	// debug_print_backtrace();
 	// $trace = ob_get_contents();
	// ob_end_clean();

	if (DEV) { // Development (print the error).
		// echo "<div class='error-message'><h3>Development Error Display</h3>$message<pre>$vars\n$trace</pre></div>";
		echo "<div class='error-message'><h3>Development Error Display</h3><p class='error'>$message</p></div>";
	} 
	if (LIVE) { // Production show a brief message and log to 'error.log'
		error_log ($message,3, CHAPTER_PATH.'/'.$_GET['chapter'].'/error.log');	
		echo '<div class="error-message"><h3>Production Error Display</h3><p class="error">A system error occurred. Check the log file for more details.</p>';	
		// Display Error log in iframe:
		echo '<h4>Error Log File</h4><iframe src="'.CHAPTER_PATH.'/'.$_GET['chapter'].'/error.log"></iframe></div>';
	}
}
// Use my error handler:
set_error_handler ('my_error_handler');
echo '<p class="message">Current Error Reporting Level: '.error_reporting().'</p>';
// Create an error:
$result = 1/0; //division by zero
?>