<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
// +--------------------------------------------------------+
// | PHP version 5.0.x |
// +--------------------------------------------------------+
// | Copyright (c) 2005-2007 Song Hyo-Jin |
// +--------------------------------------------------------+
// | License : GPL (current new version) |
// +--------------------------------------------------------+
// | Author : Song Hyo-Jin <shj at xenosi.de> |
// +--------------------------------------------------------+
//
//
$Id: debug.1.0.2.inc.php, v 1.0.2 2007/08/22 15:55:23 crosser Exp $
//
//
for debug and try catch
// debug level
define('DBG_SHOW', 1); // show error message
define('DBG_BACKTRACE', 2); // show backtrace message
define('DBG_SAVE', 4); // save database error message
define('DBG_SAVE_BACKTRACE', 8); // save database backtrace message
define('ERROR_LEVEL', error_reporting());
if(!isset(
$_DEBUG)) {
$_DEBUG = false;
}
function SHJErrorHandler(
$errno,
$errstr,
$errfile,
$errline)
{
global $_DEBUG;
$errname = array(E_ERROR => 'ERROR', E_WARNING => 'WARNING', E_NOTICE => 'NOTICE');
switch(
$errno & ERROR_LEVEL) {
case E_ERROR:
case E_WARNING:
if(
$errstr == 'Division by zero') {
break;
}
case E_NOTICE:
throw new Exception(
$errname[
$errno].' : '.
$errstr.' : '.
$errfile.' : '.
$errline,
$errno);
}
}
function SHJExceptionHandler(
$exception)
{
global $_DEBUG;
if(
$_DEBUG & DBG_SAVE) {
if(
$_DEBUG & DBG_SAVE_BACKTRACE) {
error_logging(
$exception->getMessage(), true);
}
else {
error_logging(
$exception->getMessage());
}
}
if(
$_DEBUG & DBG_SHOW) {
if(isset(
$_SERVER['HTTP_HOST'])) {
$forweb = true;
}
else {
$forweb = false;
}
if(!
headers_sent() &&
$forweb) {
header('HTTP/1.1 500');
echo str_repeat('<!-- flush -->', 500);
}
echo $exception->getMessage();
if(
$_DEBUG & DBG_BACKTRACE) {
if(
$forweb) {
print_r_web(debug_backtrace());
}
else {
print_r(debug_backtrace());
}
}
}
else {
if(!
headers_sent() &&
$forweb) {
header('HTTP/1.1 500');
echo str_repeat('<!-- flush -->', 500);
}
echo "Error Catched\n";
}
exit;
}
function error_logging(
$errtext,
$backtrace = false)
{
include_once 'SHJ/DB/PDOSQLite.inc.php';
$sql = new SHJPDOSQLite(DEBUGDBFILE);
$sql->exec(file_get_contents('/usr/share/
php5/SHJ/debug.sql'));
$fields->errtext =
$errtext;
if(
$backtrace) {
$fields->backtrace = print_r(debug_backtrace(), true);
}
$fields->errtime = time();
$stmt =
$sql->insert('debug',
$fields);
$stmt->exec();
}
error_reporting(E_ALL);
set_error_handler('SHJErrorHandler');
set_exception_handler('SHJExceptionHandler');
function apply_all(&
$arrtext,
$callback,
$function)
{
if(is_array(
$arrtext)) {
array_walk(
$arrtext, 'apply_all',
$function);
}
else {
$arrtext =
$function(
$arrtext);
}
return true;
}
/* For bug tracking */
function print_r_web(
$values,
$color = 'white')
{
echo('<xmp style="background-color:'.
$color.';">');
print_r(
$values);
echo('</xmp>');
return true;
}
?>
출처 :
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=55729&sca=&sfl=wr_subject%7C%7Cwr_content&stx=php5&sop=and