오늘 구글링 하다가 쇼핑몰 오류메세지를 봐서 팁으로 올립니다.
구글 첫페이지에 그것도 광고로 걸린 링크가 오류메세지가 나오네요.
구글같은 검색엔진은 500 Internal Server Error 정도만 뿌려줘도 알아채고 스스로 링크를 없애겠지요.
특히 보안상 제한을 걸어놓은 경우라면 403 Forbidden 정도 뿌리면 이미 구글링 되었어도 금새 없어질거라 생각됩니다. (안겪어봐서 몰라요.)
게시판이 없는 경우는 404 Not Found 를 뿌려주면 좋을겁니다. (ex : ?board=free 했는데 없는경우, ?no=444 했는데 없는경우)
오류의 경우는 아래의 라이브러리를 인클루드 하는것으로 해결할 수 있습니다.
변수에 세팅하면 그대로 동작합니다. define 참조.
오류를 DB 저장하도록 했는데, 그 부분만 적당히 만들어 넣으시면 되겠습니다.
부가기능으로는 '실제 오류' 에 대해 exception 이 가능하다는 것입니다.
라이센스는 ㅎㄷㄷ 한 GPL 최신버전 입니다. 현재로서는 GPL3 이죠.
<?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