그누보드 최신버전 (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,114
10년 전 조회 1,599
10년 전 조회 1,345
10년 전 조회 872
10년 전 조회 1,447
10년 전 조회 1,070
10년 전 조회 647
10년 전 조회 645
10년 전 조회 903
10년 전 조회 1,406
10년 전 조회 846
10년 전 조회 1,099
10년 전 조회 950
10년 전 조회 709
10년 전 조회 1,030
10년 전 조회 537
10년 전 조회 774
10년 전 조회 688
10년 전 조회 1,004
10년 전 조회 1,201
10년 전 조회 1,106
10년 전 조회 810
10년 전 조회 1,132
10년 전 조회 924
10년 전 조회 688
10년 전 조회 1,286
10년 전 조회 759
10년 전 조회 1,043
10년 전 조회 713
10년 전 조회 561
10년 전 조회 1,957
10년 전 조회 1,042
10년 전 조회 1,060
10년 전 조회 840
10년 전 조회 1,123
10년 전 조회 983
10년 전 조회 731
10년 전 조회 1,199
10년 전 조회 1,626
10년 전 조회 1,033
10년 전 조회 922
10년 전 조회 950
10년 전 조회 869
10년 전 조회 1,562
10년 전 조회 1,469
10년 전 조회 520
10년 전 조회 913
10년 전 조회 492
10년 전 조회 847
10년 전 조회 2,335
10년 전 조회 865
10년 전 조회 2,906
10년 전 조회 1,567
10년 전 조회 1,173
10년 전 조회 519
10년 전 조회 880
10년 전 조회 1,168
10년 전 조회 1,586
10년 전 조회 2,937
10년 전 조회 1,730
10년 전 조회 1,884
10년 전 조회 2,361
10년 전 조회 3,945
10년 전 조회 1,564
10년 전 조회 710
10년 전 조회 2,409
10년 전 조회 849
10년 전 조회 1,070
10년 전 조회 1,831
10년 전 조회 744
10년 전 조회 754
10년 전 조회 3,058
10년 전 조회 758
10년 전 조회 639
10년 전 조회 611
10년 전 조회 526
10년 전 조회 1,067
10년 전 조회 790
10년 전 조회 667
10년 전 조회 774
10년 전 조회 1,278
10년 전 조회 2,112
10년 전 조회 1,190
10년 전 조회 1,445
10년 전 조회 1,947
10년 전 조회 1,362
10년 전 조회 1,162
10년 전 조회 1,086
10년 전 조회 3,964
10년 전 조회 747
10년 전 조회 1,059
10년 전 조회 1,674
10년 전 조회 1,109
10년 전 조회 2,826
10년 전 조회 1,050
10년 전 조회 975
10년 전 조회 1,059
10년 전 조회 4,629
10년 전 조회 933
10년 전 조회 2,456
🐛 버그신고