.llog // if this fails, it will print the data to the window via echo function MyErrorHandler ($type, $message, $file, $line, $context) { if (!(error_reporting() & $type) && !SHOW_ALL_ERRORS) { // This error code is not included in error_reporting return; } // ERROR LEVEL $error_level = 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', 2048 => 'E_STRICT', 4096 => 'E_RECOVERABLE_ERROR', 8192 => 'E_DEPRICATED', 16384 => 'E_USER_DEPRICATED', 30719 => 'E_ALL' ); // get the current page name (strip path) $page_temp = explode("/", $_SERVER["PHP_SELF"]); // the output string: // [] current timestamp // {} the current page name in which the error occured (running script) // [] the file where the error actually happened // <> the line number in this file // [|] error name and error number // : the php error message $output = '['.date("Y-m-d H:i:s").'] {'.array_pop($page_temp).'} ['.$file.'] <'.$line.'> ['.$error_level[$type].'|'.$type.']: '.$message; # try to open file $ROOT = CURRENT_WORKING_DIR; $LOG = 'log/'; // if the log folder is not found, try to create it if (!is_dir($ROOT.$LOG) && !is_file($ROOT.LOG)) $ok = mkdir($ROOT.$LOG); $error = 0; // again, if the folder now exists, else set error flag if (is_dir($ROOT.$LOG)) { $fn = $ROOT.$LOG.'php_errors-'.date('Y-m-d').'.log'; // when opening, surpress the warning so we can catch the no file pointer below without throwing a warning for this $fp = @fopen($fn, 'a'); // write if we have a file pointer, else set error flag if ($fp) { fwrite($fp, $output."\n"); fclose($fp); } else $error = 1; } else $error = 1; // if the above writing failed if ($error) { // if the display errors is on // pretty print output for HTML if (ini_get("display_errors")) { echo "
"; echo "
".$error_level[$type].":
"; echo "$message on line $line in $file"; echo "
"; } // if write to log is on // simplified, remove datetime for log file if (ini_get('log_errors')) error_log('{'.$page_temp.'} ['.$file.'] <'.$line.'> ['.$error_level[$type].'|'.$type.']: '.$message); } // return true, to avoid that php calls its own error stuff // if E_ERROR, the php one gets called anyway return true; } // init the error handler set_error_handler("MyErrorHandler"); ?>