본문 바로가기
Programming

[PHP 강좌] 40. 설치형 게시판 만들기 3 - 라이브러리 파일 만들기

by Mizix 2010. 2. 11.
반응형
지난시간에 설치 부분을 먼저 만들어 봤습니다.

이번시간에는 모든 페이지에 공통으로 include 되어서 사용되어질 라이브러리 파일을 만들어 보겠습니다.

일반적으로 라이브러리 파일에는 사용하는 함수들을 넣어 놓습니다.

즉 오늘 이 강좌도 공통으로 사용할 함수들을 만들어 놓는 셈인거죠.

그러면 inc/lib.php 에 들어가는 함수들을 하나하나 알아보도록 하겠습니다.

우선 lib.php 전체 소스를 보시고 난 후 함수별로 하나씩 설명해 드리겠습니다.

<?
//######################################
//
//  사용자정의함수파일 : inc/lib.php
//
//######################################

//DB 접속 및 데이터 베이스 선택 사용자 함수
function sql_connect($db_host, $db_user, $db_pass, $db_name)
{
    $result = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
    mysql_select_db($db_name) or die(mysql_error());
    return $result;
}

// 쿼리 함수
function sql_query($sql)
{
    global $connect;
    $result = @mysql_query($sql, $connect) or die("<p>$sql<p>" . mysql_errno() . " : " .  mysql_error() . "<p>error file : $_SERVER[PHP_SELF]");
    return $result;
}

// 갯수 구하는 함수
function sql_total($sql)
{
    global $connect;
    $result_total = sql_query($sql, $connect);
    $data_total = mysql_fetch_array($result_total);
    $total_count = $data_total[cnt];
    return $total_count;
}

// 쿼리를 실행한 후 결과값에서 한행을 구하는 함수
function sql_fetch($sql, $error=TRUE)
{
    $result = sql_query($sql, $error);
    $row = mysql_fetch_array($result);
    return $row;
}

// 쿼리를 실행 한 후 결과값의 목록을 배열로 구하는 함수
function sql_list($sql)
{
    $sql_q = sql_query($sql);
    $sql_list = array();
    while($sql_r = mysql_fetch_array($sql_q)){
        $sql_list[]= $sql_r;
    }

    return $sql_list;
}


// 회원정보 구하는 함수
function get_member($uer_id)
{
    global $_cfg;
    $member = sql_fetch("select * from ".$_cfg[member_table]." where m_id = '".$uer_id."'");
    return $member;
}


// 경고창 띄우고 이동시키는 함수
function alert($msg='', $url
='')
{
    if (!$msg) $msg = '올바른 방법으로 이용해 주십시오.';
    echo "<script language='javascript'>alert('$msg');";
    echo "</script>";
    if($url){
        goto_url($url);
    }else{
        echo "<script language='javascript'>history.back();";
        echo "</script>";
    }
    exit;
}


// 페이지 이동시키는 함수
function goto_url($url)
{
    echo "<script language='JavaScript'> location.replace('$url'); </script>";
    exit;
}

// 파일 읽어서 변수로 내용 저장하기
function file_read($file)
{
    $handle = fopen($file, "r");
    $contents = fread($handle, filesize($file));
    fclose($handle);
    return $contents;
}

// 접근 권한 체크하는 함수 $this_level = 허용레벨
function check_level($this_level)
{
    if($_SERVER[user_level] >= $this_level){
        $result = true;
    }else{
        $result = false;
    }
    return $result;
}

// 페이징 사용자 함수
function paging($page, $page_row, $page_scale, $total_count, $ext = '')
{
    // 1. 전체 페이지 계산
    $total_page  = ceil($total_count / $page_row);

    // 2. 페이징을 출력할 변수 초기화
    $paging_str = "";

    // 3. 처음 페이지 링크 만들기
    if ($page > 1) {
        $paging_str .= "<a href='".$_SERVER[PHP_SELF]."?page=1&'".$ext.">처음</a>";
    }

    // 4. 페이징에 표시될 시작 페이지 구하기
    $start_page = ( (ceil( $page / $page_scale ) - 1) * $page_scale ) + 1;

    // 5. 페이징에 표시될 마지막 페이지 구하기
    $end_page = $start_page + $page_scale - 1;
    if ($end_page >= $total_page) $end_page = $total_page;

    // 6. 이전 페이징 영역으로 가는 링크 만들기
    if ($start_page > 1){
        $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".($start_page - 1)."&'".$ext.">이전</a>";
    }

    // 7. 페이지들 출력 부분 링크 만들기
    if ($total_page > 1) {
        for ($i=$start_page;$i<=$end_page;$i++) {
            // 현재 페이지가 아니면 링크 걸기
            if ($page != $i){
                $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".$i."&'".$ext."><span>$i</span></a>";
            // 현재페이지면 굵게 표시하기
            }else{
                $paging_str .= " &nbsp;<b>$i</b> ";
            }
        }
    }

    // 8. 다음 페이징 영역으로 가는 링크 만들기
    if ($total_page > $end_page){
        $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".($end_page + 1)."&'".$ext.">다음</a>";
    }

    // 9. 마지막 페이지 링크 만들기
    if ($page < $total_page) {
        $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".$total_page."&'".$ext.">맨끝& lt;/a>";
    }

    return $paging_str;
}
?>
[inc/lib.php 소스]

1. DB 접속 및 데이터 베이스 선택 사용자 함수
function sql_connect($db_host, $db_user, $db_pass, $db_name)
{
    $result = mysql_connect($db_host, $db_user, $db_pass) or die(mysql_error());
    mysql_select_db($db_name) or die(mysql_error());
    return $result;
}

DB에 접속하기 위한 함수입니다.
디비서버명, 디비아이디 , 디비비밀번호,디비명 을 인자로 받아서 디비연결과, 디비 선택을 한수 연결값을 리턴하는 함수입니다.

2. 쿼리 함수
function sql_query($sql)
{
    global $connect;
    $result = @mysql_query($sql, $connect) or die("<p>$sql<p>" . mysql_errno() . " : " .  mysql_error() . "<p>error file : $_SERVER[PHP_SELF]");
    return $result;
}

쿼리문을 인자로 받아서 mysql_query 문을 실행하고 에러나면 쿼리문과 에러가 난 파일을 보여주게 합니다.
성공하면 결과를 리턴합니다.

3. 갯수 구하는 함수
function sql_total($sql)
{
    global $connect;
    $result_total = sql_query($sql, $connect);
    $data_total = mysql_fetch_array($result_total);
    $total_count = $data_total[cnt];
    return $total_count;
}

갯수를 구하는 쿼리문을 받아서 갯수를 구해 리턴하는 함수입니다.
쿼리문은 "select count(*) as cnt from 테이블명 where 조건" 의 형식이여야 합니다.

4. 쿼리를 실행한 후 결과값에서 한행을 구하는 함수
function sql_fetch($sql, $error=TRUE)
{
    $result = sql_query($sql, $error);
    $row = mysql_fetch_array($result);
    return $row;
}

쿼리문을 실행해서 결과를 받은 후 한행을 구해 리턴하는 함수입니다.

5. 쿼리를 실행 한 후 결과값의 목록을 배열로 구하는 함수
function sql_list($sql)
{
    $sql_q = sql_query($sql);
    $sql_list = array();
    while($sql_r = mysql_fetch_array($sql_q)){
        $sql_list[]= $sql_r;
    }

    return $sql_list;
}


쿼리문을 실행해서 목록을 배열로 저장해서 리턴하는 함수
리턴되는 변수의 1차 배열에는 한줄의 데이터가 배열로 저장이 되어 있어 2차 배열로 리턴됩니다.

6. 회원정보 구하는 함수
function get_member($uer_id)
{
    global $_cfg;
    $member = sql_fetch("select * from ".$_cfg[member_table]." where m_id = '".$uer_id."'");
    return $member;
}


회원 아이디를 인자로 받아 회원디비에서 회원정보를 구해 배열의 형태로 리턴합니다.
$_cfg 는 config 파일에서 설정을 정의할때 사용할 변수입니다.
이 변수를 global  즉 전역 변수로 받아서 처리합니다.

7. 자바스크립트 경고창 띄우고 이동시키는 함수
function alert($msg='', $url='')
{
    if (!$msg) $msg = '올바른 방법으로 이용해 주십시오.';
    echo "<script language='javascript'>alert('$msg');";
    echo "</script>";
    if($url){
        goto_url($url);
    }else{
        echo "<script language='javascript'>history.back();";
        echo "</script>";
    }
    exit;
}


메세지를 인자로 받아 자바스크립트의 alert() 함수를 실행해 주는 함수입니다.
$url인자로 받은 경로가 있으면 경로로 이동을 없으면 바로전으로 이동시킵니다.

8. 페이지이동함수
function goto_url($url)
{
    echo "<script language='JavaScript'> location.replace('$url'); </script>";
    exit;
}

이동할 주소를 인자로 받아 페이지를 이동하는 자바스크립트의 location.replace() 함수를 실행해주는 함수입니다.

8. 파일 읽어서 변수로 내용 저장 함수
function file_read($file)
{
    $handle = fopen($file, "r");
    $contents = fread($handle, filesize($file));
    fclose($handle);
    return $contents;
}

파일을 인자로 받아서 해당 파일을 읽어 내용을 리턴하는 함수입니다.
fread() 함수는 두번째 인자가 byte 수인데요. 이 byte 만큼 읽어줍니다.

9. 접근권한 체크하는 함수
function check_level($this_level)
{
    if($_SERVER[user_level] >= $this_level){
        $result = true;
    }else{
        $result = false;
    }
    return $result;
}

접근허용 레벨을 인자로 받아 세션에 기록된 사용자 레벨과 비교해서 권한이 있으면 true , 없으면 false 를 리턴합니다.

10. 페이징 함수
function paging($page, $page_row, $page_scale, $total_count, $ext = '')
{
    // 1. 전체 페이지 계산
    $total_page  = ceil($total_count / $page_row);

    // 2. 페이징을 출력할 변수 초기화
    $paging_str = "";

    // 3. 처음 페이지 링크 만들기
    if ($page > 1) {
        $paging_str .= "<a href='".$_SERVER[PHP_SELF]."?page=1&'".$ext.">처음</a>";
    }

    // 4. 페이징에 표시될 시작 페이지 구하기
    $start_page = ( (ceil( $page / $page_scale ) - 1) * $page_scale ) + 1;

    // 5. 페이징에 표시될 마지막 페이지 구하기
    $end_page = $start_page + $page_scale - 1;
    if ($end_page >= $total_page) $end_page = $total_page;

    // 6. 이전 페이징 영역으로 가는 링크 만들기
    if ($start_page > 1){
        $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".($start_page - 1)."&'".$ext.">이전</a>";
    }

    // 7. 페이지들 출력 부분 링크 만들기
    if ($total_page > 1) {
        for ($i=$start_page;$i<=$end_page;$i++) {
            // 현재 페이지가 아니면 링크 걸기
            if ($page != $i){
                $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".$i."&'".$ext."><span>$i</span></a>";
            // 현재페이지면 굵게 표시하기
            }else{
                $paging_str .= " &nbsp;<b>$i</b> ";
            }
        }
    }

    // 8. 다음 페이징 영역으로 가는 링크 만들기
    if ($total_page > $end_page){
        $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".($end_page + 1)."&'".$ext.">다음</a>";
    }

    // 9. 마지막 페이지 링크 만들기
    if ($page < $total_page) {
        $paging_str .= " &nbsp;<a href='".$_SERVER[PHP_SELF]."?page=".$total_page."&'".$ext.">맨끝& lt;/a>";
    }

    return $paging_str;
}

현재페이지, 한페이지에 표시될 글 수, 페이지표시부분에 표시될 페이지의 갯수, 전체글수, 추가로 붙는 get 부분을 인자로 받아서 페이징 부분을 만들어 리턴해주는 함수입니다.

여기까지 게시판에서 주로 사용될 사용자 함수들을 만들어봤습니다.

이제 중요한 설정들을 미리 해 놓고 모든 파일에서 include 하는 inc/config.php 페이지를 만들어 보겠습니다.

<?
//######################################
//
//  설정파일 : inc/config.php
//
//######################################

// db.php 파일의 존재유무로 설치 했는지 확인 (존재하면 설치한것임)
if(!file_exists("./db.php")){
    ?>
    <meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
    <script>
    alert("설치가 되지 않았습니다.");
    location.replace("./install/index.php");
    </script>
    <?
    exit;
}

// 설정변수 초기화
$_cfg = array();

// DB 테이블 정의
$_cfg['member_table'] = "bd__member";
$_cfg['config_table'] = "bd__board_config";
$_cfg['board_table'] = "bd__board";
$_cfg['comment_table'] = "bd__comment";
$_cfg['history_table'] = "bd__view_history";

// db.php 파일 인클루드
include ("./db.php");
// 사용자 정의 함수 인클루드
include ("./inc/lib.php");

// 세션사용은 위한 초기화
session_start();

// DB 연결
$connect = sql_connect($mysql_host, $mysql_user, $mysql_password, $mysql_db);
?>

[inc/config.php 소스]

이 부분은 특별히 설명할 부분은 없습니다.

그러면 다음시간에는 어드민페이지 로그인과 게시판들을 생성하고 설정하는 페이지를 만들어 보겠습니다.
반응형