테스트 사이트 - 개발 중인 베타 버전입니다

그누보드 튜닝 (common.php 에서) 약간의 Tips

아빠불당님께서 common.php을 튜닝한 것과는 조금 다른 내용입니다. php에 대해서는 많이 모르기 때문에 조언주시면 감사하게 받겠습니다. ^^


출처 : http://stnzone.com/gboard/blog/?id=359


그누보드에 있는 common.php 는 사이트에 접속할 때, 글을 읽을 때마다 호출되는 코드로 최대한 최적화시켜 주는 것이 좋다.

기존코드

if (file_exists("$g4[path]/$dbconfig_file"))
{
    if (is_dir("$g4[path]/install")) die("<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'><script language='JavaScript'> alert('install 디렉토리를 삭제하여야 정상 실행됩니다.'); </script>");
    include_once("$g4[path]/$dbconfig_file");
    $connect_db = sql_connect($mysql_host, $mysql_user, $mysql_password);
    $select_db = sql_select_db($mysql_db, $connect_db);
    if (!$select_db)
        die("<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'><script language='JavaScript'> alert('DB 접속 오류'); </script>");
}
else
{
    echo "<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'>";
    echo <<<HEREDOC
    <script language="JavaScript">
    alert("DB 설정 파일이 존재하지 않습니다.\\n\\n프로그램 설치 후 실행하시기 바랍니다.");
    location.href = "./install/";
    </script>
HEREDOC;
    exit;
}


기존 코드를 다음과 같이 변경한다.

// neojzs : 최적화
include_once("$g4[path]/$dbconfig_file");
$connect_db = sql_connect($mysql_host, $mysql_user, $mysql_password);
$select_db = sql_select_db($mysql_db, $connect_db);
if (!$select_db)
    die("<meta http-equiv='content-type' content='text/html; charset=$g4[charset]'><script language='JavaScript'> alert('DB 접속 오류'); </script>");


즉, 매번 db컨피그화일이 있는지 검사하지 않게 한다. 왜냐하면 그누보드가 인스톨되어 있다면 당연히 있는 것이므로..

또한, 접근가능 IP와 접근차단 IP는 다음과 같이 처리해 주는 것이 좋다.

기존코드 

    // 접근가능 IP
    $cf_possible_ip = trim($config['cf_possible_ip']);
    if ($cf_possible_ip) {
        $is_possible_ip = false;
        $pattern = explode("\n", $cf_possible_ip);
        for ($i=0; $i<count($pattern); $i++) {
            $pattern[$i] = trim($pattern[$i]);
            if (empty($pattern[$i]))
                continue;
            //$pat = "/({$pattern[$i]})/";
            $pattern[$i] = str_replace(".", "\.", $pattern[$i]);
            $pat = "/^{$pattern[$i]}/";
            $is_possible_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
            if ($is_possible_ip)
                break;
        }
        if (!$is_possible_ip)
            die ("접근이 가능하지 않습니다.");
    }


 

// neojzs 최적화
    $is_possible_ip = true;
   
    if($config['cf_possible_ip'])
    {

     $cf_possible_ip = trim($config['cf_possible_ip']);
     if ($cf_possible_ip) {
         $is_possible_ip = false;
         $pattern = explode("\n", $cf_possible_ip);
         for ($i=0; $i<count($pattern); $i++) {
             $pattern[$i] = trim($pattern[$i]);
             if (empty($pattern[$i]))
                 continue;
 
             //$pat = "/({$pattern[$i]})/";
             $pattern[$i] = str_replace(".", "\.", $pattern[$i]);
             $pat = "/^{$pattern[$i]}/";
             $is_possible_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
             if ($is_possible_ip)
                 break;
         }
         if (!$is_possible_ip)
             die ("접근이 가능하지 않습니다.");
     }
 }

 

기존코드

// 접근차단 IP
    $is_intercept_ip = false;
    $pattern = explode("\n", trim($config['cf_intercept_ip']));
    for ($i=0; $i<count($pattern); $i++) {
        $pattern[$i] = trim($pattern[$i]);
        if (empty($pattern[$i]))
            continue;
        $pattern[$i] = str_replace(".", "\.", $pattern[$i]);
        $pat = "/^{$pattern[$i]}/";
        $is_intercept_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
        if ($is_intercept_ip)
          


 

// 접근차단 IP
    $is_intercept_ip = false;
   
    // neojzs 최적화
    if($config['cf_intercept_ip'])
    {
     $pattern = explode("\n", trim($config['cf_intercept_ip']));
     for ($i=0; $i<count($pattern); $i++) {
         $pattern[$i] = trim($pattern[$i]);
         if (empty($pattern[$i]))
             continue;
 
         $pattern[$i] = str_replace(".", "\.", $pattern[$i]);
         $pat = "/^{$pattern[$i]}/";
         $is_intercept_ip = preg_match($pat, $_SERVER['REMOTE_ADDR']);
         if ($is_intercept_ip)
             die ("접근 불가합니다.");
     }
 }


즉, 데이타가 있을 때만 검사하는 형태로 처리하는 것이다.

또한, common.php 파일을 수정할 필요가 없도록 확장하는 코드는 차라리 필요할 때마다 수정하는 것이 부하에 훨씬 좋다.

기존코드

// common.php 파일을 수정할 필요가 없도록 확장합니다.
$tmp = dir("$g4[path]/extend");
while ($entry = $tmp->read()) {
    // php 파일만 include 함
    if (preg_match("/(\.php)$/i", $entry))
        include_once("$g4[path]/extend/$entry");
}


 

// common.php 파일을 수정할 필요가 없도록 확장합니다.
// neojzs 최적화
/*

$tmp = dir("$g4[path]/extend");
while ($entry = $tmp->read()) {
    // php 파일만 include 함
    if (preg_match("/(\.php)$/i", $entry))
        include_once("$g4[path]/extend/$entry");
}
*/
// 필요한 것만 include시켜준다
include_once("$g4[path]/extend/index.php");
include_once("$g4[path]/extend/gblog.extend.php");
include_once("$g4[path]/extend/gnutalk.extend.php");


 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 13개

감사합니다. 미처 생각하지 못했던 부분을 최적화 시켜주셨네요.
^^ 아빠불당님의 최적화팁에 많은 도움을 받고 있습니다. 저역시 감사드립니다.
login, visit 테이블도 사용하지 않으면 매우 빨라집니다.

매번 쿼리를 날리니... ㅎㅎ
접근차단아이피에 관한 팁은 적용을 하니 홈페이지가 안뜨게 되요; 제가 뭘 잘못적용한걸까요;
전 아예 그 기능을 주석처리 해버렸습니다. ㅋㅋ
수정하는 코드에서 괄호를 잘 보세요.
extend 디렉토리의 index.php는 include하지 않아도 됩니다. 빈 파일 입니다.

include_once("$g4[path]/extend/index.php");
아.. 그렇군요. ^^
좋은 팁...감사합니다...
좋은 팁 감사합니다..^^

다만, 그누보드 업그레이드시에는 작업량이 좀 더 늘겠군요...
g5쯤에서는 게시판을 테이블 하나로 통합했으면 합니다.

그러면 더 다양한 기능을 손 쉽게 구현할 수 있을 겁니다.
정말 감사합니다.

게시판 목록

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.
글쓰기
🐛 버그신고