그누보드 최신버전 (5.0.36) 살펴보기 - common.php (4)

그누보드 최신버전 (5.0.36) 살펴보기 - common.php (4)

 

 

 

common.php 그누보드에서 가장 기본이 되는 파일이라고 볼수 있습니다.

 

모든 파일에 기본적으로 인클루드 되어서 사용됩니다.

 

에러출력 설정, 보안적인 처리, 기본적인 경로 설정, 디비연결, 세션 설정및 시작, 공용변수의 초기화 및 재설정, 기타 확장 등의 내용으로 이루어져 있습니다.

 

 

 

 $dbconfig_file = G5_DATA_PATH.'/'.G5_DBCONFIG_FILE;

 

 include 된 config.php 에서 설정한 대로 데이타 디렉토리 경로("G5_DATA_PATH")와 디비 환경설정 파일명("G5_DBCONFIG_FILE")을 합쳐서 디비환경설정파일의 전체경로를 생성합니다.

 

 

 

if (file_exists($dbconfig_file)) {

    include_once($dbconfig_file);

    include_once(G5_LIB_PATH.'/common.lib.php');    // 공통 라이브러리

 

    $connect_db = sql_connect(G5_MYSQL_HOST, G5_MYSQL_USER, G5_MYSQL_PASSWORD) or die('MySQL Connect Error!!!');

    $select_db  = sql_select_db(G5_MYSQL_DB, $connect_db) or die('MySQL DB Error!!!');

 

    // mysql connect resource $g5 배열에 저장 - 명랑폐인님 제안

    $g5['connect_db'] = $connect_db;

 

    sql_query(" set names utf8 ");

    if(defined('G5_MYSQL_SET_MODE') && G5_MYSQL_SET_MODE) sql_query("SET SESSION sql_mode = ''");

    if (defined(G5_TIMEZONE)) sql_query(" set time_zone = '".G5_TIMEZONE."'");

}

 

 

if (file_exists($dbconfig_file)) { 

 

해당 디비 환경설정 파일("$dbconfig_file")이 존재한다면 어떻게 하겠다는 조건절입니다.

 

"file_exists" 는 넘어온 경로가 파일 이든 디렉토리 이든 구분하지 않고 존재 여부만 판단합니다.

 

"is_file" 은 "file_exists" 의 개념과 넘어온 경로가 파일인지 여부를 같이 체크합니다.

 

여기 같은 경우는 "is_file" 을 쓰는것이 더 합당하다고 보여집니다.

 

http://php.net/manual/kr/function.file-exists.php

http://php.net/manual/kr/function.is-file.php

 

 

include_once($dbconfig_file);

include_once(G5_LIB_PATH.'/common.lib.php');    // 공통 라이브러리

 

기본 디비 환경 설정 파일과 기본 라이브러리를 인클루드 합니다.

 

 

"include" 와 "require" 는 기본적으로 같은 동작을 합니다.

 

차이가 있다면, "require" 는 "require" 된 파일이 존재하지 않거나 권한이 없는 에러가 발생하면 스크립트가 바로 중지 되지만

 

"include" 는 스크립트가 중지 되지 않습니다.

 

따라서 핵심 라이브러리나 환경설정과 관계된 파일은 "include" 보다는 "require" 가 더 적당하다고 보여집니다.

 

http://php.net/manual/kr/function.include.php

http://php.net/manual/kr/function.require.php

 

 

$connect_db = sql_connect(G5_MYSQL_HOST, G5_MYSQL_USER, G5_MYSQL_PASSWORD) or die('MySQL Connect Error!!!');

$select_db  = sql_select_db(G5_MYSQL_DB, $connect_db) or die('MySQL DB Error!!!');

 

디비서버에 연결하고, 사용할 디비를 선택하는 부분입니다.

 

 

$g5['connect_db'] = $connect_db;

 

$g5 는 그누보드 함수 내에서는 전역변수로 선언되어 쓰여지는 경우가 많으므로

 

$connect_db 를 $g5['connect_db'] 에 저장하는 이유는 어떤 상황에서 디비 연결을 끄거나 쿼리를 전송할때 따로 변수를 인자로 넘기지 않더라도 쓸수 있도록 하기 위함입니다.

 

 

sql_query(" set names utf8 ");

 

"set names 문자셋(캐릭터셋,차셋)" 은 클라이언트 즉, 여기서는 php 에서 디비서버로 연결할 때나 데이타를 주고 받을 때 지정받은 문자셋을 사용하겠다는 명령입니다.

 

" set names utf8 " 로 디비서버에 명령을 줌으로 해서, 현재 연결과 주고 받는 데이타는 모두 utf-8로 처리 할수 있도록 하는 것입니다.

 

다음 세개의 명령을 동시에 내리는 것과 같습니다.

 

SET character_set_client = 문자셋;

SET character_set_results = 문자셋;

SET character_set_connection = 문자셋;

 

http://www.mysqlkorea.com/sub.html?mcode=manual&scode=01_1&m_no=22792&cat1=1070&cat2=1074&cat3=0&lang=k

 

 

if(defined('G5_MYSQL_SET_MODE') && G5_MYSQL_SET_MODE)

 

"G5_MYSQL_SET_MODE" 는 그누보드를 설치 시 생성되는  디비 환경 설정파일("dbconfig.php") 에 상수로 정의 되었습니다.

 

"G5_MYSQL_SET_MODE" 는 true 나 fasle 로 설정되어질수 있는데, 

 

그것은 install/install_db.php 54~59 라인을 통해 기본 설정 됩니다.

 

$mysql_set_mode = 'false';

@mysql_query('set names utf8');

if(version_compare(mysql_get_server_info(), '5.6.6', '>=')  == 1) {

    @mysql_query("SET SESSION sql_mode = ''");

    $mysql_set_mode = 'true';

}

 

이부분인데,

 

요약하자면, mysql 버전을 비교하여 5.6.6 이상이면 $mysql_set_mode 를 true 로 설정하고 그 값을 "G5_MYSQL_SET_MODE" 라는 상수에 다시 저장합니다.

 

이렇게 하는 이유는 mysql 5.6.6 버전 이상부터 sql_mode 가 기본값으로 설정되어 설치 되는 이유 인듯 합니다.

 

그러나 

 

http://sir.co.kr/cm_free/1112683?sfl=mb_id%2C1&stx=dbckdghk (port443, 넓은마인드, 뽁스, 라엘, ibin 님이 좋은 조언을 해주셨습니다.)

 

의 ibin 님 말씀데로 sql_mode 는 mysql 5.0.2 부터 지원가능한 설정이므로,

 

기존 설정값이 먼저 존재하는지 뽑아본다음 존재한다면 ,

 

$mysql_set_mode = 'true'; 와 같이 처리 하는것이 더 올바른 방법이 아닐가 생각됩니다.

 

$mysql_set_mode = 'false';

@mysql_query('set names utf8');

if(@mysql_result(@mysql_query("select @@session.sql_mode"), 0, 0) != "") {

 

    @mysql_query("SET SESSION sql_mode = ''");

    $mysql_set_mode = 'true';

}

 

이런식으로 제안 될수 있을 것 같습니다.

 

sql_mode 는 

 

SET GLOBAL sql_mode = 'modes';

SET SESSION sql_mode = 'modes';

 

와 같은 방법으로 설정할수 있습니다.

 

위에것은 범용 설정 명령이고, 아래것은 현재 접속에서만 쓰여지는 설정 명령 입니다.

 

즉, 위에것은 ("SET GLOBAL sql_mode = 'modes';") 접속하는 사용자의 권한이 SUPER 일때만 가능합니다.

 

따라서 일반적으로 사용 할수 있는 "SET SESSION sql_mode = 'modes';" 사용합니다.

 

사용할수 있는 sql_mode 에는 

 

ANSI, STRICT_TRANS_TABLES, TRADITIONAL, ALLOW_INVALID_DATES, ANSI_QUOTES, ERROR_FOR_DIVISION_BY_ZERO, HIGH_NOT_PRECEDENCE, IGNORE_SPACE, NO_AUTO_CREATE_USER, NO_AUTO_VALUE_ON_ZERO, NO_BACKSLASH_ESCAPES, NO_DIR_IN_CREATE, NO_ENGINE_SUBSTITUTION, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_UNSIGNED_SUBTRACTION, NO_ZERO_DATE, NO_ZERO_IN_DATE, ONLY_FULL_GROUP_BY, PIPES_AS_CONCAT, REAL_AS_FLOAT, STRICT_ALL_TABLES, STRICT_TRANS_TABLES

 

등이 있습니다.

 

주로 SQL 구문의 문법체크를 얼마나 엄격 하게 할것인가, 질의시 에러가 났을경우 어떻게 반응 할것인가, 또는 특정 기능 사용시 어느 범주에서 사용 할것인가 등의 설정들을 할수 있는 것 같습니다.

 

http://www.mysqlkorea.com/sub.html?mcode=develop&scode=01&lang=k&m_no=21330&cat1=5&cat2=120&cat3=138

https://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sqlmode_strict_trans_tables

 

제가 디비 전문가가 아니라 거기에 대한 상세한 설명은 생략합니다.

 

 

그누보드에서는 sql_query("SET SESSION sql_mode = ''"); 와 같이 sql_mode 를 사용하지 않겠다고 설정합니다.

 

이유는 기본적으로 STRICT_ 가 포함된 sql_mode 가 설정 되어 있을시에 SQL 구문 검사가 엄격하게 이루어 지기 때문에, 기존 소스나 스킨에서 많은 에러를 발생하게 되기 때문입니다.

 

 

if (defined(G5_TIMEZONE))

 

"G5_TIMEZONE" 가 설정되어 있다면 어떤 행위를 하겟다는 조건절입니다.

 

그러나 현재 그누보드에선 기본적으로 "G5_TIMEZONE" 가 셋팅되어있지는 않습니다.

 

만약 mysql 서버의 기본 타임존이 Asia/Seoul 로 설정되어 있지 않다면,

 

config.php 에 define('G5_TIMEZONE', 'Asia/Seoul'); 과 같이 설정을 추가하여

 

sql_query(" set time_zone = '".G5_TIMEZONE."'"); 가 실행 될수 있도록 하면 됩니다.

 

"set time_zone" 역시 "set names" 나 "SET SESSION sql_mode = 'modes'" 와 같이 현재 세션에서만 mysql 서버의 타임존을 지정한 시간대로 설정하겠다는 명령입니다.

 

 

 

else {

?>

 

<!doctype html>

<html lang="ko">

<head>

<meta charset="utf-8">

<title>오류! <?php echo G5_VERSION ?> 설치하기</title>

<link rel="stylesheet" href="install/install.css">

</head>

<body>

 

<div id="ins_bar">

    <span id="bar_img">GNUBOARD5</span>

    <span id="bar_txt">Message</span>

</div>

<h1>그누보드5를 먼저 설치해주십시오.</h1>

<div class="ins_inner">

    <p>다음 파일을 찾을 수 없습니다.</p>

    <ul>

        <li><strong><?php echo G5_DATA_DIR.'/'.G5_DBCONFIG_FILE ?></strong></li>

    </ul>

    <p>그누보드 설치 후 다시 실행하시기 바랍니다.</p>

    <div class="inner_btn">

        <a href="<?php echo G5_URL; ?>/install/"><?php echo G5_VERSION ?> 설치하기</a>

    </div>

</div>

<div id="ins_ft">

    <strong>GNUBOARD5</strong>

    <p>GPL! OPEN SOURCE GNUBOARD</p>

</div>

 

</body>

</html>

 

<?php

    exit;

}

 

이 부분은 지정된 디비 환경 설정파일이 존재하지 않을시 그누보드 설치 화면으로 보내기 위한 부분입니다. 

|

댓글 12개

오늘도 수강 완료했습니다. 기본 개념이 나날이 무럭무럭 자라는 느낌이네요~ㅎㅎ
감사합니다!^^
네에 감사합니다.^^
지난밤에 비로그인 상태로 강좌를 접하여 인사를 못 드렸습니다.
6등 클릭 ㅋ 오늘 새벽에도 한 번 접속 리딩.. ~~
설명…. 정말 예술입니당!
늘 그렇듯 평온하신 하루 되십시오! 고맙습니다!
네에 고맙습니다.^^
고맙습니다^^
너무 지루하지 않을까도 싶은데요.....
규식이보다는 쉬워서 좋은데요~ㅎㅎ

php 함수나 다른 기술적인 부분도 필요하지만
그누보드를 사용한다면 기본 구조나 함수 등을 알고 있으면 좋죠~^^

그런 면에서 이렇게 좋은 강좌를 올려주시니 감사할 따름입니다.
고맙습니다.

맞는 방향이라고 생각하고 꾸준히 해보겟습니다.
고맙습니다.
열심히 보고 있습니다...^^
네 감사합니다.
댓글을 작성하시려면 로그인이 필요합니다. 로그인

프로그램

태그 필터 (최대 3개) 전체 개발자 소스 기타 mysql 팁자료실 javascript php linux flash 정규표현식 jquery node.js mobile 웹서버 os 프로그램 강좌 썸네일 이미지관련 도로명주소 그누보드5 기획자 견적서 계약서 기획서 마케팅 제안서 seo 통계 서식 통계자료 퍼블리셔 html css 반응형 웹접근성 퍼블리싱 표준화 반응형웹 홈페이지기초 부트스트랩 angularjs 포럼 스크린리더 센스리더 개발자톡 개발자팁 퍼블리셔톡 퍼블리셔팁 기획자톡 기획자팁 프로그램강좌 퍼블리싱강좌
+
제목 글쓴이 날짜 조회
10년 전 조회 1,139
10년 전 조회 1,637
10년 전 조회 1,380
10년 전 조회 907
10년 전 조회 1,487
10년 전 조회 1,103
10년 전 조회 680
10년 전 조회 669
10년 전 조회 920
10년 전 조회 1,437
10년 전 조회 875
10년 전 조회 1,127
10년 전 조회 986
10년 전 조회 743
10년 전 조회 1,066
10년 전 조회 574
10년 전 조회 807
10년 전 조회 720
10년 전 조회 1,038
10년 전 조회 1,229
10년 전 조회 1,135
10년 전 조회 844
10년 전 조회 1,171
10년 전 조회 953
10년 전 조회 715
10년 전 조회 1,317
10년 전 조회 787
10년 전 조회 1,070
10년 전 조회 746
10년 전 조회 595
10년 전 조회 1,983
10년 전 조회 1,074
10년 전 조회 1,096
10년 전 조회 878
10년 전 조회 1,163
10년 전 조회 1,019
10년 전 조회 754
10년 전 조회 1,233
10년 전 조회 1,666
10년 전 조회 1,071
10년 전 조회 950
10년 전 조회 982
10년 전 조회 903
10년 전 조회 1,593
10년 전 조회 1,497
10년 전 조회 551
10년 전 조회 944
10년 전 조회 526
10년 전 조회 883
10년 전 조회 2,366
10년 전 조회 902
10년 전 조회 2,946
10년 전 조회 1,596
10년 전 조회 1,207
10년 전 조회 566
10년 전 조회 916
10년 전 조회 1,202
10년 전 조회 1,630
10년 전 조회 2,973
10년 전 조회 1,766
10년 전 조회 1,925
10년 전 조회 2,400
10년 전 조회 3,989
10년 전 조회 1,606
10년 전 조회 741
10년 전 조회 2,447
10년 전 조회 876
10년 전 조회 1,110
10년 전 조회 1,876
10년 전 조회 773
10년 전 조회 788
10년 전 조회 3,105
10년 전 조회 798
10년 전 조회 670
10년 전 조회 646
10년 전 조회 572
10년 전 조회 1,100
10년 전 조회 833
10년 전 조회 708
10년 전 조회 817
10년 전 조회 1,309
10년 전 조회 2,156
10년 전 조회 1,227
10년 전 조회 1,489
10년 전 조회 1,990
10년 전 조회 1,403
10년 전 조회 1,212
10년 전 조회 1,118
10년 전 조회 4,009
10년 전 조회 782
10년 전 조회 1,097
10년 전 조회 1,709
10년 전 조회 1,154
10년 전 조회 2,870
10년 전 조회 1,093
10년 전 조회 1,022
10년 전 조회 1,095
10년 전 조회 4,667
10년 전 조회 967
10년 전 조회 2,500
🐛 버그신고