error_reporting(E_ALL ^ E_NOTICE);
header('P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"');
if (!isset($set_time_limit)) $set_time_limit = 0;
@set_time_limit($set_time_limit);
function set_magic_quotes_gpc($array){
if (is_array($array)) {
foreach($array as $k => $v) {
if (is_array($v)) $array[$k] = set_magic_quotes_gpc($v);
else $array[$k] = addslashes($v);
}
}
return $array;
}
if(!get_magic_quotes_gpc()) {
$_GET = set_magic_quotes_gpc($_GET);
$_POST = set_magic_quotes_gpc($_POST);
$_COOKIE = set_magic_quotes_gpc($_COOKIE);
}
$ext_arr = array_merge(array_keys($_SERVER), array ('_ENV', '_GET', '_POST', '_FILES', '_SERVER', '_COOKIE', '_SESSION', '_REQUEST'));
foreach($ext_arr as $v) {
if (isset($_GET[$v])) unset($_GET[$v]);
if (isset($_POST[$v])) unset($_POST[$v]);
}
$install_path = dirname(__FILE__);
$real_g4l_path = realpath($g4_path);
if ($install_path != $real_g4l_path || !is_file($real_g4l_path . '/config.php')) {
die('$g4_path 가 잘 못 설정 되었거나, 정상적인 사용이 아님');
}
@extract($_GET);
@extract($_POST);
@extract($_SERVER);
$config = array();
$member = array();
$board = array();
$group = array();
$g4 = array();
$g4['path'] = $g4_path;
unset($g4_path);
include_once($g4['path'] . '/lib/constant.php'); // 상수 정의
include_once($g4['path'] . '/config.php'); // 설정 파일
include_once($g4['path'] . '/lib/common.lib.php'); // 공통 라이브러리
if (empty($g4['url'])){
$g4['url'] = 'http://' . $_SERVER['HTTP_HOST'];
$dir = dirname($_SERVER['PHP_SELF']);
if (!is_file('config.php'))
$dir = dirname($dir);
$cnt = substr_count($g4['path'], '..');
for ($i = 2; $i <= $cnt; $i++)
$dir = dirname($dir);
$g4['url'] .= $dir;
}
$g4['url'] = strtr($g4['url'], '\\', '/');
$g4['url'] = preg_replace("`/+$`", '', $g4['url']);
//==============================================================================
// 공통
//==============================================================================
if (is_file($g4['path'] . '/dbconfig.php')){
if (is_dir($g4['path'] . '/install')) die("");
include_once($g4['path'] . '/dbconfig.php');
$connect_db = sql_connect($mysql_host, $mysql_user, $mysql_password);
$select_db = sql_select_db($mysql_db, $connect_db);
if (!$select_db)
die("");
}
else{
echo "";
echo <<
alert("DB 설정 파일이 존재하지 않습니다.\\n\\n프로그램 설치 후 실행하시기 바랍니다.");
location.href = "./install/";
HEREDOC;
exit;
}
unset($mysql_host, $mysql_user, $mysql_password, $mysql_db); // DB 설정값을 클리어 해줍니다.
//-------------------------------------------
// SESSION 설정
//-------------------------------------------
ini_set('session.use_trans_sid', 0); // PHPSESSID를 자동으로 넘기지 않음
ini_set('url_rewriter.tags',''); // 링크에 PHPSESSID가 따라다니는것을 무력화함 (해뜰녘님께서 알려주셨습니다.)
session_save_path($g4['path'] . '/data/session');
if (isset($SESSION_CACHE_LIMITER))
@session_cache_limiter($SESSION_CACHE_LIMITER);
else
@session_cache_limiter('no-cache, must-revalidate');
//==============================================================================
// 공용 변수
//==============================================================================
// 기본환경설정
// 기본적으로 사용하는 필드만 얻은 후 상황에 따라 필드를 추가로 얻음
$config = sql_fetch(" select * from $g4[config_table] ");
ini_set('session.cache_expire', 180); // 세션 캐쉬 보관시간 (분)
ini_set('session.gc_maxlifetime', 10800); // session data의 garbage collection 존재 기간을 지정 (초)
ini_set('session.gc_probability', 1); // session.gc_probability는 session.gc_divisor와 연계하여 gc(쓰레기 수거) 루틴의 시작 확률을 관리합니다. 기본값은 1입니다. 자세한 내용은 session.gc_divisor를 참고하십시오.
ini_set('session.gc_divisor', 100); // session.gc_divisor는 session.gc_probability와 결합하여 각 세션 초기화 시에 gc(쓰레기 수거) 프로세스를 시작할 확률을 정의합니다. 확률은 gc_probability/gc_divisor를 사용하여 계산합니다. 즉, 1/100은 각 요청시에 GC 프로세스를 시작할 확률이 1%입니다. session.gc_divisor의 기본값은 100입니다.
session_set_cookie_params(0, '/');
ini_set('session.cookie_domain', $g4['cookie_domain']);
@session_start();
// 4.00.03 : [보안관련] PHPSESSID 가 틀리면 로그아웃한다.
if ($_REQUEST['PHPSESSID'] && $_REQUEST['PHPSESSID'] != session_id())
goto_url($g4['bbs_path'] . '/logout.php');
// QUERY_STRING
$qstr = '';
if (isset($sca)) {
$sca = mysql_real_escape_string(stripslashes($sca));
$qstr .= '&sca=' . urlencode(stripslashes($sca));
}
if (isset($sfl)) {
$sfl = mysql_real_escape_string(stripslashes($sfl));
$qstr .= '&sfl=' . urlencode(stripslashes($sfl)); // search field (검색 필드)
}
if (isset($stx)) { // search text (검색어)
$stx = mysql_real_escape_string(stripslashes($stx));
$qstr .= '&stx=' . urlencode(stripslashes($stx));
}
if (isset($sst)) {
$sst = mysql_real_escape_string(stripslashes($sst));
$qstr .= '&sst=' . urlencode(stripslashes($sst)); // search sort (검색 정렬 필드)
}
if (isset($sod)) { // search order (검색 오름, 내림차순)
$sod = preg_match("/^(asc|desc)$/i", $sod) ? $sod : "";
$qstr .= '&sod=' . $sod;
}
if (isset($sop)) { // search operator (검색 or, and 오퍼레이터)
$sop = preg_match("/^(or|and)$/i", $sop) ? $sop : "";
$qstr .= '&sop=' . $sop;
}
if (isset($spt)) { // search part (검색 파트[구간])
$spt = (int)$spt;
$qstr .= '&spt=' . $spt;
}
if (isset($page)) { // 리스트 페이지
$page = (int)$page;
$qstr .= '&page=' . $page;
}
if ($wr_id) {
$wr_id = (int)$wr_id;
}
if ($bo_table) {
$bo_table = preg_match("/^[a-z0-9_]+$/i", $bo_table) ? $bo_table : "";
}
// URL ENCODING
if (isset($url)) {
$urlencode = urlencode(stripslashes($url));
}
else {
$urlencode = urlencode($_SERVER['REQUEST_URI']);
}
//===================================
// 자동로그인 부분에서 첫로그인에 포인트 부여하던것을 로그인중일때로 변경하면서 코드도 대폭 수정하였습니다.
if ($_SESSION['ss_mb_id']) // 로그인중이라면
{
$member = get_member($_SESSION['ss_mb_id']);
// 오늘 처음 로그인 이라면
if (substr($member['mb_today_login'], 0, 10) != $g4['time_ymd']) {
// 첫 로그인 포인트 지급
insert_point($member['mb_id'], $config['cf_login_point'], "{$g4['time_ymd']} 첫로그인", '@login', $member['mb_id'], $g4['time_ymd']);
// 오늘의 로그인이 될 수도 있으며 마지막 로그인일 수도 있음
// 해당 회원의 접근일시와 IP 를 저장
$sql = " update {$g4['member_table']} set mb_today_login = '{$g4['time_ymdhis']}', mb_login_ip = '{$_SERVER['REMOTE_ADDR']}' where mb_id = '{$member['mb_id']}' ";
sql_query($sql);
}
}
else{
// 자동로그인 ---------------------------------------
// 회원아이디가 쿠키에 저장되어 있다면 (3.27)
if ($tmp_mb_id = get_cookie('ck_mb_id')){
$tmp_mb_id = substr(preg_replace("/[^a-zA-Z0-9_]*/", "", $tmp_mb_id), 0, 20);
// 최고관리자는 자동로그인 금지
if ($tmp_mb_id != $config['cf_admin']){
$sql = " select mb_password, mb_intercept_date, mb_leave_date, mb_email_certify from {$g4['member_table']} where mb_id = '{$tmp_mb_id}' ";
$row = sql_fetch($sql);
$key = md5($_SERVER['SERVER_ADDR'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'] . $row['mb_password']);
// 쿠키에 저장된 키와 같다면
$tmp_key = get_cookie("ck_auto");
if ($tmp_key == $key && $tmp_key){
// 차단, 탈퇴가 아니고 메일인증이 사용이면서 인증을 받았다면
if ($row['mb_intercept_date'] == '' &&
$row['mb_leave_date'] == '' &&
(!$config['cf_use_email_certify'] || preg_match('/[1-9]/', $row['mb_email_certify'])) ) {
// 세션에 회원아이디를 저장하여 로그인으로 간주
set_session('ss_mb_id', $tmp_mb_id);
// 페이지를 재실행
echo "";
exit;
}
}
// $row 배열변수 해제
unset($row);
}
}
// 자동로그인 end ---------------------------------------
}
// 첫방문 쿠키
// 1년간 저장
if (!get_cookie('ck_first_call')) set_cookie('ck_first_call', $g4['server_time'], 86400 * 365);
if (!get_cookie('ck_first_referer')) set_cookie('ck_first_referer', $_SERVER['HTTP_REFERER'], 86400 * 365);
// 회원이 아니라면 권한을 방문객 권한으로 함
if (!($member['mb_id']))
$member['mb_level'] = 1;
else
$member['mb_dir'] = substr($member['mb_id'], 0, 2);
$write_table = '';
if (isset($bo_table)) {
$board = sql_fetch(" select * from {$g4['board_table']} where bo_table = '$bo_table' ");
if ($board['bo_table']) {
$gr_id = $board['gr_id'];
$write_table = $g4['write_prefix'] . $bo_table; // 게시판 테이블 전체이름
if ($wr_id)
$write = sql_fetch(" select * from $write_table where wr_id = '$wr_id' ");
}
}
if (isset($gr_id))
$group = sql_fetch(" select * from {$g4['group_table']} where gr_id = '$gr_id' ");
// 회원, 비회원 구분
$is_member = $is_guest = false;
if ($member['mb_id'])
$is_member = true;
else
$is_guest = true;
$is_admin = is_admin($member['mb_id']);
if ($is_admin != 'super') {
// 접근가능 IP
$cf_possible_ip = trim($config['cf_possible_ip']);
if ($cf_possible_ip) {
$is_possible_ip = false;
$pattern = explode("\n", $cf_possible_ip);
for ($i=0; $iread()) {
// php 파일만 include 함
if (preg_match("/(\.php)$/i", $entry))
include_once($g4['path'] . '/extend/' . $entry);
}
$tmp->close();
?>