그누보드 최신버전 (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 = 문자셋;
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 함수나 다른 기술적인 부분도 필요하지만
그누보드를 사용한다면 기본 구조나 함수 등을 알고 있으면 좋죠~^^
그런 면에서 이렇게 좋은 강좌를 올려주시니 감사할 따름입니다.
맞는 방향이라고 생각하고 꾸준히 해보겟습니다.
게시판 목록
프로그램
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 |
|---|---|---|---|---|
| 7730 | 10년 전 | 1272 | ||
| 7729 | 10년 전 | 1082 | ||
| 7728 |
잘살아보자
|
10년 전 | 546 | |
| 7727 |
잘살아보자
|
10년 전 | 453 | |
| 7726 |
잘살아보자
|
10년 전 | 791 | |
| 7725 |
잘살아보자
|
10년 전 | 515 | |
| 7724 |
잘살아보자
|
10년 전 | 425 | |
| 7723 |
잘살아보자
|
10년 전 | 491 | |
| 7722 |
잘살아보자
|
10년 전 | 422 | |
| 7721 |
잘살아보자
|
10년 전 | 464 | |
| 7720 |
잘살아보자
|
10년 전 | 406 | |
| 7719 |
비긴어게인
|
10년 전 | 646 | |
| 7718 |
|
10년 전 | 2493 | |
| 7717 |
잘살아보자
|
10년 전 | 627 | |
| 7716 |
잘살아보자
|
10년 전 | 360 | |
| 7715 |
잘살아보자
|
10년 전 | 407 | |
| 7714 |
잘살아보자
|
10년 전 | 436 | |
| 7713 | 10년 전 | 1738 | ||
| 7712 | 10년 전 | 1663 | ||
| 7711 | 10년 전 | 1053 | ||
| 7710 | 10년 전 | 1340 | ||
| 7709 | 10년 전 | 1477 | ||
| 7708 | 10년 전 | 1434 | ||
| 7707 | 10년 전 | 818 | ||
| 7706 |
별지기천사
|
10년 전 | 547 | |
| 7705 | 10년 전 | 1042 | ||
| 7704 |
ICONdesignstudio
|
10년 전 | 585 | |
| 7703 | 10년 전 | 542 | ||
| 7702 |
|
10년 전 | 680 | |
| 7701 | 10년 전 | 1370 | ||
| 7700 | 10년 전 | 1073 | ||
| 7699 | 10년 전 | 557 | ||
| 7698 | 10년 전 | 1106 | ||
| 7697 | 10년 전 | 5112 | ||
| 7696 | 10년 전 | 605 | ||
| 7695 | 10년 전 | 1650 | ||
| 7694 | 10년 전 | 1016 | ||
| 7693 | 10년 전 | 1507 | ||
| 7692 | 10년 전 | 1249 | ||
| 7691 | 10년 전 | 781 | ||
| 7690 | 10년 전 | 1355 | ||
| 7689 | 10년 전 | 977 | ||
| 7688 | 10년 전 | 547 | ||
| 7687 |
파랑새1597
|
10년 전 | 551 | |
| 7686 | 10년 전 | 800 | ||
| 7685 | 10년 전 | 1316 | ||
| 7684 | 10년 전 | 767 | ||
| 7683 | 10년 전 | 1010 | ||
| 7682 | 10년 전 | 880 | ||
| 7681 | 10년 전 | 615 | ||
| 7680 | 10년 전 | 949 | ||
| 7679 | 10년 전 | 451 | ||
| 7678 | 10년 전 | 689 | ||
| 7677 | 10년 전 | 593 | ||
| 7676 |
|
10년 전 | 911 | |
| 7675 |
|
10년 전 | 1110 | |
| 7674 | 10년 전 | 1026 | ||
| 7673 | 10년 전 | 721 | ||
| 7672 | 10년 전 | 1049 | ||
| 7671 | 10년 전 | 835 | ||
| 7670 | 10년 전 | 595 | ||
| 7669 |
mashmellow
|
10년 전 | 1198 | |
| 7668 | 10년 전 | 673 | ||
| 7667 | 10년 전 | 951 | ||
| 7666 |
senseme
|
10년 전 | 621 | |
| 7665 | 10년 전 | 473 | ||
| 7664 | 10년 전 | 1859 | ||
| 7663 |
mixx애교
|
10년 전 | 952 | |
| 7662 | 10년 전 | 979 | ||
| 7661 |
hkhkah
|
10년 전 | 750 | |
| 7660 | 10년 전 | 1037 | ||
| 7659 |
커네드커네드
|
10년 전 | 901 | |
| 7658 |
바람돌이팡
|
10년 전 | 630 | |
| 7657 | 10년 전 | 1120 | ||
| 7656 | 10년 전 | 1542 | ||
| 7655 | 10년 전 | 948 | ||
| 7654 |
개발짜증나
|
10년 전 | 827 | |
| 7653 |
네이비칼라
|
10년 전 | 858 | |
| 7652 |
밥먹고합시다
|
10년 전 | 781 | |
| 7651 |
플라이SINJI
|
10년 전 | 1481 | |
| 7650 |
개발짜증나
|
10년 전 | 1375 | |
| 7649 | 10년 전 | 430 | ||
| 7648 |
이미영ㅇㅇ
|
10년 전 | 820 | |
| 7647 | 10년 전 | 407 | ||
| 7646 | 10년 전 | 769 | ||
| 7645 | 10년 전 | 2261 | ||
| 7644 | 10년 전 | 791 | ||
| 7643 |
|
10년 전 | 2831 | |
| 7642 | 10년 전 | 1482 | ||
| 7641 | 10년 전 | 1106 | ||
| 7640 |
개발짜증나
|
10년 전 | 447 | |
| 7639 |
|
10년 전 | 785 | |
| 7638 |
개발짜증나
|
10년 전 | 1090 | |
| 7637 | 10년 전 | 1508 | ||
| 7636 | 10년 전 | 2875 | ||
| 7635 | 10년 전 | 1654 | ||
| 7634 | 10년 전 | 1819 | ||
| 7633 | 10년 전 | 2286 | ||
| 7632 | 10년 전 | 3882 | ||
| 7631 |
|
10년 전 | 1498 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기