그누보드 최신버전 (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,120
10년 전 조회 1,604
10년 전 조회 1,348
10년 전 조회 876
10년 전 조회 1,451
10년 전 조회 1,072
10년 전 조회 653
10년 전 조회 649
10년 전 조회 905
10년 전 조회 1,411
10년 전 조회 853
10년 전 조회 1,101
10년 전 조회 954
10년 전 조회 715
10년 전 조회 1,035
10년 전 조회 544
10년 전 조회 778
10년 전 조회 693
10년 전 조회 1,007
10년 전 조회 1,204
10년 전 조회 1,109
10년 전 조회 813
10년 전 조회 1,137
10년 전 조회 926
10년 전 조회 689
10년 전 조회 1,291
10년 전 조회 765
10년 전 조회 1,047
10년 전 조회 715
10년 전 조회 563
10년 전 조회 1,962
10년 전 조회 1,048
10년 전 조회 1,064
10년 전 조회 844
10년 전 조회 1,130
10년 전 조회 987
10년 전 조회 737
10년 전 조회 1,206
10년 전 조회 1,628
10년 전 조회 1,036
10년 전 조회 926
10년 전 조회 952
10년 전 조회 876
10년 전 조회 1,564
10년 전 조회 1,473
10년 전 조회 525
10년 전 조회 920
10년 전 조회 495
10년 전 조회 850
10년 전 조회 2,338
10년 전 조회 870
10년 전 조회 2,912
10년 전 조회 1,569
10년 전 조회 1,176
10년 전 조회 524
10년 전 조회 885
10년 전 조회 1,175
10년 전 조회 1,593
10년 전 조회 2,942
10년 전 조회 1,737
10년 전 조회 1,890
10년 전 조회 2,367
10년 전 조회 3,953
10년 전 조회 1,571
10년 전 조회 713
10년 전 조회 2,415
10년 전 조회 854
10년 전 조회 1,075
10년 전 조회 1,837
10년 전 조회 749
10년 전 조회 757
10년 전 조회 3,066
10년 전 조회 763
10년 전 조회 646
10년 전 조회 617
10년 전 조회 531
10년 전 조회 1,070
10년 전 조회 796
10년 전 조회 673
10년 전 조회 780
10년 전 조회 1,281
10년 전 조회 2,119
10년 전 조회 1,192
10년 전 조회 1,451
10년 전 조회 1,950
10년 전 조회 1,366
10년 전 조회 1,169
10년 전 조회 1,088
10년 전 조회 3,970
10년 전 조회 750
10년 전 조회 1,063
10년 전 조회 1,679
10년 전 조회 1,114
10년 전 조회 2,831
10년 전 조회 1,052
10년 전 조회 985
10년 전 조회 1,063
10년 전 조회 4,632
10년 전 조회 936
10년 전 조회 2,461
🐛 버그신고