[서버운영] 검색엔진을 위해 페이지 헤더 제대로 출력하기. :: PHP5의 추가된 사항을 올리는 곳입니다.[SSISO Community]
 
SSISO 카페 SSISO Source SSISO 구직 SSISO 쇼핑몰 SSISO 맛집
추천검색어 : JUnit   Log4j   ajax   spring   struts   struts-config.xml   Synchronized   책정보   Ajax 마스터하기   우측부분

PHP5의 추가된 사항을 올리는 곳입니다.
[1]
등록일:2007-10-10 22:45:40 (0%)
작성자:
제목:[서버운영] 검색엔진을 위해 페이지 헤더 제대로 출력하기.
전부터 페이지의 헤더에 대해 신경쓰고 있었는데,
오늘 구글링 하다가 쇼핑몰 오류메세지를 봐서 팁으로 올립니다.
구글 첫페이지에 그것도 광고로 걸린 링크가 오류메세지가 나오네요.
광고는 안되겠지만,
일반적인 게시판 링크 같은경우라면
구글같은 검색엔진은 500 Internal Server Error 정도만 뿌려줘도 알아채고 스스로 링크를 없애겠지요.
특히  보안상  제한을  걸어놓은  경우라면  403  Forbidden  정도  뿌리면  이미  구글링  되었어도  금새  없어질거라  생각됩니다.  (안겪어봐서  몰라요.)
게시판이 없는 경우는 404 Not Found 를 뿌려주면 좋을겁니다. (ex : ?board=free 했는데 없는경우, ?no=444 했는데 없는경우)

게시판의 경우는 프로그램을 손봐야 하는거고,
오류의 경우는 아래의 라이브러리를 인클루드 하는것으로 해결할 수 있습니다.
$_DEBUG 변수에 세팅하면 그대로 동작합니다. define 참조.
오류를 DB 저장하도록 했는데, 그 부분만 적당히 만들어 넣으시면 되겠습니다.

부가기능으로는 '실제 오류' 에 대해 exception 이 가능하다는 것입니다.

라이센스는 ㅎㄷㄷ 한 GPL 최신버전 입니다. 현재로서는 GPL3 이죠.

ex)

<?php

include_once 'debug.inc.php';

$_DEBUG = DBG_SHOW; // 오류출력
$_DEBUG = DBG_SHOW | DBG_BACKTRACE; // 오류시점부터 거꾸로 trace 한 정보 출력


exception ex)

try {
    $a = mysql_query('SELECT * FROM atable LIMIT 5'); // 테이블이 없으면
} catch(Exception $e) {
    // 오류나겠죠. 생성~
    mysql_query('CREATE TABLE atable (seq INTEGER NOT NULL AUTO INCREMENT, contents TEXT NOT NULL, PRIMARY KEY (seq))');
    $a = null;
}

debug.inc.php

<?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
[본문링크] [서버운영] 검색엔진을 위해 페이지 헤더 제대로 출력하기.
[1]
코멘트(이글의 트랙백 주소:/cafe/tb_receive.php?no=1076
작성자
비밀번호

 

SSISOCommunity

[이전]

Copyright byCopyright ⓒ2005, SSISO Community All Rights Reserved.