<?
@extract($HTTP_POST_VARS);
@extract($HTTP_GET_VARS);
// 자주 사용하는 값
$today = date("Y-m-d", time());
$now = date("Y-m-d H:i:s", time());
@include_once "config.inc.php";
@include_once "dbconfig.inc.php";
if ($cfg[mysql_host] && $cfg[mysql_user] && $cfg[mysql_db]) {
// 상대경로가 선언되지 않았다면
if (!isset($reldir)) {
$reldir = ".";
if (!file_exists($cfg[dir_session])) {
$reldir = "..";
}
}
//-------------------------------------------
// SESSION 설정
//-------------------------------------------
ini_set("session.cache_expire", "86400");
session_save_path("$reldir/$cfg[dir_session]");
if ($SESSION_CACHE_LIMITER) {
@session_cache_limiter($SESSION_CACHE_LIMITER);
} else {
@session_cache_limiter('nocache, must-revalidate');
}
// 세션이 사라지지 않는 버그를 위하여
if ($HTTP_COOKIE_VARS["ck_session"] == "") {
setcookie("ck_session", "1", 0);
}
session_start() ;
//-------------------------------------------
include_once "dbconfig.inc.php";
$connect = @mysql_connect($cfg[mysql_host], $cfg[mysql_user], $cfg[mysql_pass]);
$select_db = @mysql_select_db($cfg[mysql_db], $connect);
if (!$select_db) {
echo "DB 접속 오류";
exit;
}
} else {
echo "<span style='font-size:9pt;'>";
echo "<p>DB의 설정이 올바르지 않거나 dbconfig.inc.php가 존재하지 않습니다.";
echo "<p>설치방법 : http://도메인/그누보드디렉토리/_admin/install.php";
echo "<p>[<a href='$cfg[dir_admin]/install.php'>지금 설치</a>]";
echo "</font>";
exit;
}
// 마이크로 타임을 얻어 계산 형식으로 만든다
function get_microtime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
// 현재페이지, 총페이지수, 한페이지에 보여줄 행, URL
function get_paging($write_pages, $cur_page, $total_page, $n, $url)
{
global $cfg;
$str = "";
if ($cur_page > 1)
{
$str .= "<a href='" . $url . "1' class=s_a>처음</a></a>";
$str .= " <a href='" . $url . ($cur_page-1) . "' class=s_a>이전</a>";
}
$start_page = ( ( (int)( ($cur_page - 1 ) / $write_pages ) ) * $write_pages ) + 1;
$end_page = $start_page + $write_pages - 1;
if ($end_page >= $total_page) $end_page = $total_page;
if ($start_page > 1)
$str .= " <a href='" . $url . ($start_page-1) . "' class=s_a>...</a>";
if ($total_page > 1)
for ($k=$start_page;$k<=$end_page;$k++)
if ($cur_page != $k)
$str .= " <a href='$url$k' class=s_a>$k</a>";
else
$str .= " <b>$k</b>";
if ($total_page > $end_page)
$str .= " <a href='" . $url . ($end_page+1) . "' class=s_a>...</a>";
if ($cur_page < $total_page)
{
$str .= " <a href='$url" . ($cur_page+1) . "' class=s_a>다음</a>";
// 속도를 위해 막음
//$str .= " [<a href='$url$total_page'>맨끝</a>]";
}
$str .= "";
return $str;
}
function alert($msg, $url='')
{
if (!$msg) $msg = "올바른 방법으로 이용해 주십시오.";
echo "<script language='javascript'>alert('$msg');";
if (!$url)
echo "history.go(-1);";
echo "</script>";
if ($url)
echo "<meta http-equiv='refresh' content='0;url=$url'>";
exit;
}
function message($msg, $url='')
{
if ($url) {
$url = "location.href='$url'";
} else {
$url = "history.go(-1);";
}
include "message.php";
exit;
}
function get_yn($val, $case='')
{
switch ($case) {
case '1' : $result = ($val > 0) ? 'Y' : 'N'; break;
default : $result = ($val > 0) ? '예' : '아니오';
}
return $result;
}
// mysql_query 와 mysql_error 를 한꺼번에 처리
function sql_query_error($sql)
{
$result = mysql_query($sql) or die("<p>$sql<p>" . mysql_errno() . " : " . mysql_error());
return $result;
}
// 한행을 얻는다.
function sql_fetch_array($sql)
{
$result = sql_query_error($sql);
$row = @mysql_fetch_array($result);
mysql_free_result($result);
return $row;
}
// 한글 한글자(2byte)는 길이 2, 공란.영숫자.특수문자는 길이 1
function cut_str($str, $len, $suffix="")
{
$s = substr($str, 0, $len);
$cnt = 0;
for ($i=0; $i<strlen($s); $i++)
if (ord($s[$i]) > 127)
$cnt++;
$s = substr($s, 0, $len - ($cnt % 2));
if (strlen($s) >= strlen($str))
$suffix = "";
return $s . $suffix;
}
function set_search_font($stext, $str)
{
// / 검색시 오류나는 부분을 수정
/*
$source = array ("[", "]");
$target = array ("[", "]");
$stext = str_replace($source, $target, $stext);
return ereg_replace("$stext", "__SEARCH_FONT_BEGIN__{$stext}__SEARCH_FONT_END__", $str);
*/
return str_replace($stext, "__SEARCH_FONT_BEGIN__{$stext}__SEARCH_FONT_END__", $str);
//return preg_replace("/$stext/i", "__SEARCH_FONT_BEGIN__{$stext}__SEARCH_FONT_END__", $str);
}
function get_search_font($str) {
global $default;
$source = array("/__SEARCH_FONT_BEGIN__/", "/__SEARCH_FONT_END__/");
$target = array("<span style='background-color:$default[de_search_bgcolor]'><font color='$default[de_search_color]'>", "</font></span>");
return preg_replace($source, $target, $str);
}
// TEXT 형식으로 변환
function get_text($str, $html=0)
{
$source[] = "/ /";
$target[] = " ";
$source[] = "/</";
$target[] = "<";
$source[] = "/>/";
$target[] = ">";
//$source[] = "/\"/";
//$target[] = """;
$source[] = "/\'/";
$target[] = "'";
$source[] = "/}/";
$target[] = "}";
if ($html) {
$source[] = "/\n/";
$target[] = "<br>";
}
return preg_replace($source, $target, $str);
}
// 검색 구문을 얻는다.
function get_sql_search($field, $stext)
{
$str = " and ( ";
switch ($field) {
case "wr_subject|wr_content" :
$str .= " (wr_subject like '%$stext%' or wr_content like '%$stext%') ";
break;
case "ca_id" :
$str .= " ($field = '$stext') ";
break;
case "wr_hit" :
case "wr_good" :
case "wr_nogood" :
$str .= " ($field >= '$stext') ";
break;
case "wr_num" :
$str .= " ($field = ".((-1)*$stext).") ";
break;
default :
$str .= " ($field like '%$stext%') ";
break;
}
$str .= " ) ";
return $str;
}
// 게시판 테이블에서 하나의 행을 읽음
function get_write($write, $wr_id)
{
return sql_fetch_array(" select * from $write where wr_id = '$wr_id' ");
}
// 그룹 설정 테이블에서 하나의 행을 읽음
function get_group($gr_id)
{
global $cfg;
return sql_fetch_array(" select * from $cfg[table_group] where gr_id = '$gr_id' ");
}
// 존재하는 게시판인가?
function is_board($table)
{
global $cfg;
$is = false;
$result = mysql_list_tables($cfg[mysql_db]);
for ($i=0; $i<mysql_num_rows($result); $i++) {
if ($table == mysql_tablename($result, $i)) {
$resultfield = mysql_list_fields($cfg[mysql_db], $table);
// 테이블의 첫번째 필드가 wr_id 이면 게시판 테이블이다.
if (mysql_field_name($resultfield, 0) == "wr_id") {
$is = true;
break;
}
}
}
return $is;
}
// 회원 정보를 얻는다.
function get_member($mb_id)
{
global $cfg;
$sql = " select * from $cfg[table_member]
where mb_id = TRIM('$mb_id') ";
return sql_fetch_array($sql);
}
// SQL PASSWORD 를 얻는다.
function sql_password($passwd)
{
$sql = " SELECT PASSWORD('$passwd') ";
$row = sql_fetch_array($sql);
return $row[0];
}
// way.co.kr 의 wayboard 참고
function urlautolink ($str)
{
global $default;
$str = ereg_replace("<", "\t_lt_\t", $str);
$str = ereg_replace(">", "\t_gt_\t", $str);
$str = ereg_replace("&", "&", $str);
$str = ereg_replace(""", "\"", $str);
$str = eregi_replace("([^(http://)]|\(|^)(www\.[a-zA-Z0-9\.-]+\.[\xA1-\xFEa-zA-Z0-9\.:&#=_\?/~\+%@;-]+)", "\\1<A HREF=\"http://\\2\" TARGET='$default[de_link_target]'>\\2</A>", $str);
$str = eregi_replace("([^(HREF=\"?'?)|(SRC=\"?'?)]|\(|^)((http|https|ftp|telnet|news|mms)://[a-zA-Z0-9\.-]+\.[\xA1-\xFEa-zA-Z0-9\.:&#=_\?/~\+%@;-]+)", "\\1<A HREF=\"\\2\" TARGET='$default[de_link_target]'>\\2</A>", $str);
$str = eregi_replace("([^(HREF=)]|\(|^)\"?'?([a-zA-Z0-9\._-]+@[a-zA-Z0-9\.-]+)", "\\1<A HREF=\"mailto:\\2\">\\2</A>", $str);
$str = ereg_replace("\t_lt_\t", "<", $str);
$str = ereg_replace("\t_gt_\t", ">", $str);
return $str;
}
// 스킨경로를 얻는다
function get_skin_dir($val, $reldir=".")
{
global $cfg;
$result_array = array();
$dirname = "$reldir/$cfg[dir_skin]/$val/";
$handle = opendir($dirname);
while ($file = readdir($handle)) {
if($file == "."||$file == "..") {
continue;
}
if (is_dir($dirname.$file)) {
$result_array[] = $file;
}
}
closedir($handle);
sort($result_array);
return $result_array;
}
// 리스트 제목에 정렬 넣기
function get_field_sort($subject, $field) {
global $HTTP_SERVER_VARS, $qstr, $aorder;
return "<a href='$HTTP_SERVER_VARS[PHP_SELF]?$qstr&ssort=$field&sorder=$aorder[$field]'>$subject</a>";
}
// 메일 보내기 (파일 여러개 첨부 가능)
function mailer($fname, $fmail, $to, $subject, $content, $type=0, $file="", $charset="EUC-KR", $cc="", $bcc="") {
// type : text=0, html=1, text+html=2
$fname = "=?$charset?B?" . base64_encode($fname) . "?=";
$subject = "=?$charset?B?" . base64_encode($subject) . "?=";
$charset = ($charset != "") ? "charset=$charset" : "";
$header = "Return-Path: <$fmail>\n";
$header .= "From: $fname <$fmail>\n";
$header .= "Reply-To: <$fmail>\n";
if ($cc) $header .= "Cc: $cc\n";
if ($bcc) $header .= "Bcc: $bcc\n";
$header .= "MIME-Version: 1.0\n";
$header .= "X-Mailer: sir mailer 0.9 (sir.co.kr)\n";
if ($file != "") {
$boundary = uniqid("http://sir.co.kr/");
$header .= "Content-type: MULTIPART/MIXED; BOUNDARY=\"$boundary\"\n";
$header .= "--$boundary\n";
}
if ($type) {
$header .= "Content-Type: TEXT/HTML; $charset\n";
if ($type == 2)
$content = nl2br($content);
} else {
$header .= "Content-Type: TEXT/PLAIN; $charset\n";
$content = stripslashes($content);
}
$header .= "Content-Transfer-Encoding: BASE64\n\n";
$header .= chunk_split(base64_encode($content)) . "\n";
if ($file != "") {
foreach ($file as $f) {
$header .= "\n--$boundary\n";
$header .= "Content-Type: APPLICATION/OCTET-STREAM; name=\"$f[name]\"\n";
$header .= "Content-Transfer-Encoding: BASE64\n";
$header .= "Content-Disposition: inline; filename=\"$f[name]\"\n";
$header .= "\n";
$header .= chunk_split(base64_encode($f[data]));
$header .= "\n";
}
$header .= "--$boundary--\n";
}
@mail($to, $subject, "", $header);
}
// 파일 첨부시
/*
$fp = fopen(__FILE__, "r");
$file[] = array(
"name"=>basename(__FILE__),
"data"=>fread($fp, filesize(__FILE__)));
fclose($fp);
*/
// 파일을 첨부함
function attach_file($filename, $file)
{
$fp = fopen($file, "r");
$tmpfile = array(
"name" => $filename,
"data" => fread($fp, filesize($file)));
fclose($fp);
return $tmpfile;
}
function get_admin($admin='default')
{
global $cfg, $default, $group, $board;
$is = false;
if ($admin == 'board') {
$mb = sql_fetch_array("select * from $cfg[table_member] where mb_id = '$board[bo_admin]'");
$is = true;
}
if (($is && !$mb[0]) || $admin == 'group') {
$mb = sql_fetch_array("select * from $cfg[table_member] where mb_id = '$group[gr_admin]'");
$is = true;
}
if (($is && !$mb[0]) || $admin == 'default') {
$mb = sql_fetch_array("select * from $cfg[table_member] where mb_id = '$default[de_admin]'");
}
return $mb;
}
function is_admin($mb_id)
{
global $default, $cfg;
$is = '';
if ($mb_id) {
if ($default[de_admin] == $mb_id) {
$is = 'default';
} else {
$sql = " select count(*) from $cfg[table_group] where gr_admin = '$mb_id' ";
$row = sql_fetch_array($sql);
if ($row[0] > 0) {
$is = 'group';
} else {
$sql = " select count(*) from $cfg[table_board] where bo_admin = '$mb_id' ";
$row = sql_fetch_array($sql);
if ($row[0] > 0) {
$is = 'board';
}
}
}
}
return $is;
}
// 분류 옵션을 얻음
function get_category_option($table)
{
global $cfg;
$sql = " select * from {$table}_cat order by ca_id ";
$result = sql_query_error($sql);
$str = "";
while ($row = mysql_fetch_array($result)) {
$str .= "<option value='$row[ca_id]'>$row[ca_name]</option>\n";
}
mysql_free_result($result);
return $str;
}
function get_category_name($table, $ca_id)
{
global $cfg;
$sql = " select ca_name from {$table}_cat where ca_id = '$ca_id' ";
$row = sql_fetch_array($sql);
return $row[0];
}
// 필터링
function check_filter($content)
{
global $default;
$filter = $default[de_filter];
$is_bad = false;
$pattern = explode(",", $filter);
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if ($pattern[$i] == "") {
continue;
}
$pat = "/{$pattern[$i]}/i";
$is_bad = preg_match($pat, $content);
if ($is_bad) {
break;
}
}
return $is_bad;
}
// IP 차단
function check_intercept_ip()
{
global $cfg, $HTTP_SERVER_VARS;
$is_bad = false;
$pattern = explode(",", trim($default[de_intercept_ip]));
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if ($pattern[$i] == "") {
continue;
}
$pat = "/^({$pattern[$i]})/";
$is_bad = preg_match($pat, $HTTP_SERVER_VARS[REMOTE_ADDR]);
if ($is_bad)
break;
}
return $is_bad;
}
function get_level_select($name, $selected='1', $event='')
{
global $cfg;
$str = "<select name='$name' $event>";
for ($i=$cfg[level_guest]; $i<=$cfg[level_max]; $i++) {
$str .= "<option value='$i'";
if ($i == $selected) {
$str .= " selected ";
}
$str .= ">$i</option>";
}
$str .= "</select>";
return $str;
}
function get_yn_select($name, $selected='1', $event='')
{
$str = "<select name='$name' $event>";
if ($selected) {
$str .= "<option value='1' selected>예</option>";
$str .= "<option value='0'>아니오</option>";
} else {
$str .= "<option value='1'>예</option>";
$str .= "<option value='0' selected>아니오</option>";
}
$str .= "</select>";
return $str;
}
function insert_point($mb_id, $point)
{
global $cfg, $default, $today;
$sql = " select mb_today_point from $cfg[table_member]
where mb_id = '$mb_id'
and TO_DAYS('$today') - TO_DAYS(mb_today_login) = 0 ";
$row = sql_fetch_array($sql);
$today_point = $row[mb_today_point];
// 하루 누적 포인트보다 작다면
if ($today_point < $default[de_day_max_point]) {
$sql = " update $cfg[table_member]
set mb_point = mb_point + '$point',
mb_today_point = mb_today_point + '$point'
where mb_id = '$mb_id' ";
sql_query_error($sql);
}
}
// 부여된 포인트를 삭제한다.
function delete_point($po_id)
{
global $cfg;
$sql = " select mb_id, po_point from $cfg[table_point] where po_id = '$po_id' ";
$po = sql_fetch_array($sql);
$sql = " delete from $cfg[table_point] where po_id = '$po_id' ";
sql_query_error($sql);
$sql = " update $cfg[table_member] set mb_point = mb_point - '$po[po_point]' where mb_id = '$po[mb_id]' ";
sql_query_error($sql);
}
// 게시판의 다음글 번호를 얻는다.
function get_next_num($table, $notice=0)
{
/*
$sql = " select min(wr_num) from $table where wr_notice = '$notice' ";
$row = sql_fetch_array($sql);
return $row[0] - 1;
*/
// 빠른 검색을 위하여 위의 코드를 아래의 코드로 대체함 (2003-03-04)
// 공지사항일 경우 공지사항에서 가장 작은 번호를 얻고
if ($notice == -1) {
$sql1 = " select min(wr_num) from $table where wr_notice = '-1' ";
$row1 = sql_fetch_array($sql1);
}
// 공지사항이 아닌글에서 가장 작은 번호를 얻어
$sql2 = " select min(wr_num) from $table where wr_notice = '0' ";
$row2 = sql_fetch_array($sql2);
// 공지사항이 하나도 없다면 공지사항이 아닌글의 번호를 주고
if (!$row1[0]) $row1[0] = $row2[0];
// 공지사항이면서 공지사항이 공지사항이 아닌글보다 작거나 같다면 공지사항의 번호를 1 뺀 값을 반환
if (($notice == -1) && ($row1[0] <= $row2[0])) {
return $row1[0] - 1;
} else { // 아니면 공지사항이 아닌글의 번호를 1 뺀 값을 반환
return $row2[0] - 1;
}
}
// 서명에 사용할 수 없는 태그를 다른 이름의 태그로 변환
function convert_signature($signature)
{
$source[] = "<script";
$source[] = "</script";
$target[] = "<x-script";
$target[] = "</x-script";
return str_replace($source, $target, $signature);
}
// 제목별로 컬럼 정렬하는 QUERY STRING
function title_sort($col, $title)
{
global $ssort, $sorder, $sselect, $stext, $page, $gr_id;
global $HTTP_SERVER_VARS;
$q1 = "ssort=$col";
$q2 = "sorder=asc";
if ($ssort == $col) {
if ($sorder == "asc") {
$q2 = "sorder=desc";
}
}
return "<a href='$HTTP_SERVER_VARS[PHP_SELF]?$q1&$q2&sselect=$sselect&stext=$stext&gr_id=$gr_id&page=$page'><font color=#ffffff>$title</font></a>";
}
// 로그인 사용자 수
function get_login_count($kind='total')
{
global $cfg;
$fr_time = date("Y-m-d H:i:s", time() - (60 * $cfg[login_minutes]));
$to_time = date("Y-m-d H:i:s", time());
$sql = " select count(lo_ip) from $cfg[table_login]
where lo_datetime between '$fr_time' and '$to_time' ";
if ($kind == 'total')
$sql .= "";
else if ($kind == 'member')
$sql .= " and mb_id != '' ";
else if ($kind == 'guest')
$sql .= " and mb_id = '' ";
$row = sql_fetch_array($sql);
return $row[0];
}
// 쪽지 레이어
function gblayer($mb_id, $name='', $email='', $homepage='', $icon=true)
{
global $cfg, $reldir, $bbsdir;
static $layerno = 0;
$layerno++;
$email = preg_replace("/@/", "@", $email);
$homepage = set_http($homepage);
$str = "<span onclick=\"gblayeraction('gblayer{$layerno}')\" style='cursor:hand;'>";
if ($mb_id) {
$mb = get_member($mb_id);
$icon_file = "$reldir/$cfg[dir_member]/$mb_id.gif";
if (file_exists($icon_file) && is_file($icon_file)) {
$size = getimagesize($icon_file);
$width = $size[0];
$height = $size[1];
if ($width > 16) {
$width = 16;
}
if ($height > 16) {
$height = 16;
}
$str .= "<img src='$icon_file' width='$width' height='$height' align=absbottom> ";
}
$str .= "<b>$name</b>";
// 정보 비공개
if (!$mb[mb_open]) {
$mb_id = "";
$email = "";
$homepage = "";
}
} else {
$str .= $name;
}
$str .= "</span>";
$dir = "$reldir/$bbsdir";
$str .= "<script language='JavaScript'>gblayer('gblayer{$layerno}', '{$mb_id}', '{$name}', '{$email}', '{$homepage}', '{$dir}');</script>";
return $str;
}
// url에 http:// 를 붙인다
function set_http($url)
{
if (!trim($url))
return;
if (!eregi("^(http|https)://", $url))
$url = "http://" . $url;
return $url;
}
// 파일을 보이게 하는 링크 (이미지, 플래쉬, 동영상)
function view_file_link($file)
{
global $cfg, $board, $reldir;
if (!$file) return;
$size = @getimagesize("$reldir/$cfg[dir_file]/$board[bo_table]/$file");
$source_width = $size[0];
$source_height = $size[1];
if ($board[bo_table_width] <= 100) {
if ($size[0] > $cfg[large_image_size]) {
$rate = $size[1] / $size[0];
$size[0] = $cfg[large_image_size];
$size[1] = (int)($size[0] * $rate);
}
} else {
if ($size[0] > $board[bo_table_width]) {
$rate = $size[1] / $size[0];
$size[0] = $board[bo_table_width];
$size[1] = (int)($size[0] * $rate);
}
}
$width = $size[0];
$height = $size[1];
if (preg_match($cfg[image_extension], $file))
return "<img src='$reldir/$cfg[dir_file]/$board[bo_table]/$file' width='$width' height='$height' border=0><p>";
else if (preg_match($cfg[flash_extension], $file))
return "<embed src='$reldir/$cfg[dir_file]/$board[bo_table]/$file' width='$width' height='$height'></embed><p>";
else if (preg_match($cfg[movie_extension], $file))
return "<embed src='$reldir/$cfg[dir_file]/$board[bo_table]/$file'></embed><p>";
}
// 현재 스크립트의 URL 을 얻는다
function get_current_url($http="http")
{
global $HTTP_SERVER_VARS;
$url = $http . "://" . $HTTP_SERVER_VARS["HTTP_HOST"] . dirname($HTTP_SERVER_VARS["PHP_SELF"]);
// 뒤에 / 로 끝나면 / 를 없애준다
return preg_replace("/(\/)$/", "", $url);
}
// 파일의 용량을 구한다.
function get_filesize($file)
{
$size = filesize(addslashes($file));
if ($size >= 1024768) {
$size = number_format($size/1024768, 1) . "M";
} else if ($size >= 1024) {
$size = number_format($size/1024, 1) . "K";
} else {
$size = number_format($size, 0) . "byte";
}
return $size;
}
function conv_subject($subject, $len, $suffix="")
{
global $sselect, $stext;
$subject = cut_str($subject, $len, $suffix);
if ($stext && preg_match("/wr_subject/", $sselect)) {
$subject = set_search_font($stext, $subject);
}
$subject = get_text($subject);
if ($stext && preg_match("/wr_subject/", $sselect)) {
$subject = get_search_font($subject);
}
return $subject;
}
// content 를 변환한다.
function conv_content($content, $html)
{
global $sselect, $stext;
if ($html) { // html 이면
$source = array ( "/<script/i", "/<\/script/i", "/javascript:/i", "/http-equiv/i" );
$target = array ( "<x-script", "</x-script", "x-javascript:", "x-http-equiv" );
if ($html == 2) { // 자동 줄바꿈
$source[] = "/\n/";
$target[] = "<br>";
}
$content = preg_replace($source, $target, $content);
} else { // text 이면
if ($stext && preg_match("/wr_content/", $sselect)) {
$content = set_search_font($stext, $content);
}
$content = get_text($content, 1);
if ($stext && preg_match("/wr_content/", $sselect)) {
$content = get_search_font($content);
}
$content = urlautolink($content);
}
return $content;
}
// 최신글을 추출한다.
function latest($skin_dir='', $bo_table, $rows=10, $len=40)
{
global $latest_skin, $cfg, $reldir, $bbsdir;
include_once "$reldir/$bbsdir/gblayer.php";
// 스킨디렉토리값이 넘어왔다면
if ($skin_dir) {
$skin_dir = "$reldir/$bbsdir/$cfg[dir_skin]/latest/$skin_dir";
} else {
$skin_dir = $latest_skin;
}
$sql = " select * from $cfg[table_board] where bo_table = '{$cfg[write_table_prefix]}{$bo_table}' ";
$bo = sql_fetch_array($sql);
$bo_subject = $bo[bo_subject];
include "$skin_dir/latest_head.skin.php";
$sql = " select *
from {$cfg[write_table_prefix]}{$bo_table}
where wr_comment = 0
order by wr_num limit 0, $rows ";
$result = sql_query_error($sql);
for ($i=0; $row = mysql_fetch_array($result); $i++) {
$wr_subject = conv_subject($row[wr_subject], $len,"…");
//$wr_name = cut_str($row[wr_name],10);
$wr_name = gblayer($row[mb_id], cut_str($row[wr_name],10), $row[wr_email], $row[wr_homepage], "$reldir/$bbsdir");
$wr_date = substr($row[wr_datetime],2,8);
$a_list_link = "$reldir/$bbsdir/gnuboard.php?bo_table=$bo_table&wr_id=$row[wr_id]";
$file1_image = "$reldir/$cfg[dir_file]/$bo_table/$row[wr_file1]"; //이미지를 보이게추가함
include "$skin_dir/latest_main.skin.php";
}
mysql_free_result($result);
$show_nodata_begin = "";
$show_nodata_end = "";
if ($i>0) {
$show_nodata_begin = "<!--";
$show_nodata_end = "-->";
}
include "$skin_dir/latest_tail.skin.php";
}
// 화면 머리부분
function head($title="", $script="")
{
global $reldir, $bbsdir, $cfg, $board, $group, $default, $member;
global $board_skin, $outlogin_skin, $member_skin, $memo_skin, $latest_skin, $dir;
global $is_admin;
global $HTTP_SERVER_VARS;
$gmnow = gmdate('D, d M Y H:i:s') . ' GMT';
header('Expires: 0'); // rfc2616 - Section 14.21
header('Last-Modified: ' . $gmnow);
header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
header('Pragma: no-cache'); // HTTP/1.0
echo "<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=euc-kr'>
<title>{$title}</title>
<link rel='stylesheet' href='{$reldir}/style.css' type='text/css'>
</head>
<body leftmargin=5 topmargin=5 {$script}>
<!-- 상단 책갈피 -->
<a name='gnuboard_head'></a>
<table width=100% cellpadding=0 cellspacing=0 border=0><tr><td>
";
if ($board[bo_include_head]) { @include $board[bo_include_head]; }
if ($board[bo_content_head]) { echo stripslashes($board[bo_content_head]); }
}
// 화면 꼬리부분
function tail()
{
global $reldir, $bbsdir, $cfg, $board;
if ($board[bo_content_tail]) { echo stripslashes($board[bo_content_tail]); }
if ($board[bo_include_tail]) { @include $board[bo_include_tail]; }
echo "
</td></tr></table>
<script language='JavaScript' src='{$reldir}/wrest.js'></script>
</body>
</html>";
}
// 자바스크립트에서 go(-1) 또는 back() 함수를 쓰면 폼값이 사라질때 해당 폼의 상단에 사용하면
// 캐쉬의 내용을 가져옴. 완전한지는 검증되지 않음
function header_cache()
{
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("cache-contril: no-cache,must-revalidate");
header("pragma: no-cache") ;
}
// 폴더의 용량 ($dir는 / 없이 넘기세요)
function dirsize($dir)
{
$size = 0;
$d = dir($dir);
while ($entry = $d->read()) {
if ($entry != "." && $entry != "..") {
$size += filesize("$dir/$entry");
}
}
$d->close();
return $size;
}
// HTML 특수문자 변환 htmlspecialchars
function htmlspecialchars2($str)
{
$trans = array("\"" => """, "'" => "'", "<"=>"<", ">"=>">");
$str = strtr($str, $trans);
return $str;
}
//------------------------------------------------------------
// 공통
//------------------------------------------------------------
if (!$select_db) {
return;
}
// 로그인중이라면
if ($HTTP_SESSION_VARS[ss_mb_id]) {
$member = get_member($HTTP_SESSION_VARS[ss_mb_id]);
// 읽지 않은 쪽지가 있다면
$sql = " select count(*) from $cfg[table_memo]
where me_recv_mb_id = '$member[mb_id]'
and me_read_datetime = '0000-00-00 00:00:00' ";
$row = sql_fetch_array($sql);
$memo_not_read = $row[0];
} else {
unset($member);
}
// 회원자료가 없다면 (로그인이 아니라면 또는 회원이 아니라면)
if (!$member[mb_id]) {
$member[mb_level] = $cfg[level_guest];
}
$sql = " insert into $cfg[table_login]
set lo_ip = '$HTTP_SERVER_VARS[REMOTE_ADDR]',
mb_id = '$member[mb_id]',
lo_datetime = '$now' ";
$result = mysql_query($sql);
if (!$result) {
$sql = " update $cfg[table_login]
set mb_id = '$member[mb_id]',
lo_datetime = '$now'
where lo_ip = '$HTTP_SERVER_VARS[REMOTE_ADDR]' ";
mysql_query($sql);
}
// 시간이 지난 접속은 삭제한다
$deltime = date("Y-m-d H:i:s", time() - (60 * $cfg[login_minutes]));
$sql = " delete from $cfg[table_login] where lo_datetime < '$deltime' ";
mysql_query($sql);
if (isset($bo_table)) {
$write_table = $cfg[write_table_prefix] . $bo_table; // 게시판 테이블 전체이름
$board = sql_fetch_array(" select * from $cfg[table_board] where bo_table = '$bo_table' ");
if ($board[0]) {
$gr_id = $board[gr_id];
if ($wr_id) {
$write = sql_fetch_array(" select * from $write_table where wr_id = '$wr_id' ");
}
}
}
if ($gr_id) {
$group = sql_fetch_array(" select * from $cfg[table_group] where gr_id = '$gr_id' ");
}
//===================================
// 공용 변수
//===================================
// 기본환경설정
$default = sql_fetch_array(" select * from $cfg[table_default] ");
// 스킨 디렉토리
$board_skin = "$reldir/$bbsdir/$cfg[dir_skin]/board/$board[bo_skin]"; // 게시판 스킨경로
$outlogin_skin = "$reldir/$bbsdir/$cfg[dir_skin]/outlogin/$default[de_outlogin_skin]"; // 아웃로그인 스킨경로
$member_skin = "$reldir/$bbsdir/$cfg[dir_skin]/member/$default[de_member_skin]"; // 회원가입, 로그인, 비밀번호 분실 스킨경로
$memo_skin = "$reldir/$bbsdir/$cfg[dir_skin]/memo/$default[de_memo_skin]"; // 쪽지 스킨경로
$latest_skin = "$reldir/$bbsdir/$cfg[dir_skin]/latest/$default[de_latest_skin]"; // 최신글 스킨경로
$dir = $board_skin; // $board_skin 을 사용해야 하지만 기존 스킨과의 호환을 위하여 그냥 놔둠
// QUERY_STRING
$qstr = "";
if (isset($bo_table)) $qstr .= "bo_table=$bo_table";
if (isset($sselect)) $qstr .= "&sselect=$sselect";
if (isset($stext)) $qstr .= "&stext=$stext";
if (isset($section)) $qstr .= "§ion=$section";
// 관리자인가?
$is_admin = is_admin($member[mb_id]);
//===================================
// 개발자(사용자) 함수 및 변수 라이브러리
@include_once "libdev.inc.php";
?>
@extract($HTTP_POST_VARS);
@extract($HTTP_GET_VARS);
// 자주 사용하는 값
$today = date("Y-m-d", time());
$now = date("Y-m-d H:i:s", time());
@include_once "config.inc.php";
@include_once "dbconfig.inc.php";
if ($cfg[mysql_host] && $cfg[mysql_user] && $cfg[mysql_db]) {
// 상대경로가 선언되지 않았다면
if (!isset($reldir)) {
$reldir = ".";
if (!file_exists($cfg[dir_session])) {
$reldir = "..";
}
}
//-------------------------------------------
// SESSION 설정
//-------------------------------------------
ini_set("session.cache_expire", "86400");
session_save_path("$reldir/$cfg[dir_session]");
if ($SESSION_CACHE_LIMITER) {
@session_cache_limiter($SESSION_CACHE_LIMITER);
} else {
@session_cache_limiter('nocache, must-revalidate');
}
// 세션이 사라지지 않는 버그를 위하여
if ($HTTP_COOKIE_VARS["ck_session"] == "") {
setcookie("ck_session", "1", 0);
}
session_start() ;
//-------------------------------------------
include_once "dbconfig.inc.php";
$connect = @mysql_connect($cfg[mysql_host], $cfg[mysql_user], $cfg[mysql_pass]);
$select_db = @mysql_select_db($cfg[mysql_db], $connect);
if (!$select_db) {
echo "DB 접속 오류";
exit;
}
} else {
echo "<span style='font-size:9pt;'>";
echo "<p>DB의 설정이 올바르지 않거나 dbconfig.inc.php가 존재하지 않습니다.";
echo "<p>설치방법 : http://도메인/그누보드디렉토리/_admin/install.php";
echo "<p>[<a href='$cfg[dir_admin]/install.php'>지금 설치</a>]";
echo "</font>";
exit;
}
// 마이크로 타임을 얻어 계산 형식으로 만든다
function get_microtime()
{
list($usec, $sec) = explode(" ",microtime());
return ((float)$usec + (float)$sec);
}
// 현재페이지, 총페이지수, 한페이지에 보여줄 행, URL
function get_paging($write_pages, $cur_page, $total_page, $n, $url)
{
global $cfg;
$str = "";
if ($cur_page > 1)
{
$str .= "<a href='" . $url . "1' class=s_a>처음</a></a>";
$str .= " <a href='" . $url . ($cur_page-1) . "' class=s_a>이전</a>";
}
$start_page = ( ( (int)( ($cur_page - 1 ) / $write_pages ) ) * $write_pages ) + 1;
$end_page = $start_page + $write_pages - 1;
if ($end_page >= $total_page) $end_page = $total_page;
if ($start_page > 1)
$str .= " <a href='" . $url . ($start_page-1) . "' class=s_a>...</a>";
if ($total_page > 1)
for ($k=$start_page;$k<=$end_page;$k++)
if ($cur_page != $k)
$str .= " <a href='$url$k' class=s_a>$k</a>";
else
$str .= " <b>$k</b>";
if ($total_page > $end_page)
$str .= " <a href='" . $url . ($end_page+1) . "' class=s_a>...</a>";
if ($cur_page < $total_page)
{
$str .= " <a href='$url" . ($cur_page+1) . "' class=s_a>다음</a>";
// 속도를 위해 막음
//$str .= " [<a href='$url$total_page'>맨끝</a>]";
}
$str .= "";
return $str;
}
function alert($msg, $url='')
{
if (!$msg) $msg = "올바른 방법으로 이용해 주십시오.";
echo "<script language='javascript'>alert('$msg');";
if (!$url)
echo "history.go(-1);";
echo "</script>";
if ($url)
echo "<meta http-equiv='refresh' content='0;url=$url'>";
exit;
}
function message($msg, $url='')
{
if ($url) {
$url = "location.href='$url'";
} else {
$url = "history.go(-1);";
}
include "message.php";
exit;
}
function get_yn($val, $case='')
{
switch ($case) {
case '1' : $result = ($val > 0) ? 'Y' : 'N'; break;
default : $result = ($val > 0) ? '예' : '아니오';
}
return $result;
}
// mysql_query 와 mysql_error 를 한꺼번에 처리
function sql_query_error($sql)
{
$result = mysql_query($sql) or die("<p>$sql<p>" . mysql_errno() . " : " . mysql_error());
return $result;
}
// 한행을 얻는다.
function sql_fetch_array($sql)
{
$result = sql_query_error($sql);
$row = @mysql_fetch_array($result);
mysql_free_result($result);
return $row;
}
// 한글 한글자(2byte)는 길이 2, 공란.영숫자.특수문자는 길이 1
function cut_str($str, $len, $suffix="")
{
$s = substr($str, 0, $len);
$cnt = 0;
for ($i=0; $i<strlen($s); $i++)
if (ord($s[$i]) > 127)
$cnt++;
$s = substr($s, 0, $len - ($cnt % 2));
if (strlen($s) >= strlen($str))
$suffix = "";
return $s . $suffix;
}
function set_search_font($stext, $str)
{
// / 검색시 오류나는 부분을 수정
/*
$source = array ("[", "]");
$target = array ("[", "]");
$stext = str_replace($source, $target, $stext);
return ereg_replace("$stext", "__SEARCH_FONT_BEGIN__{$stext}__SEARCH_FONT_END__", $str);
*/
return str_replace($stext, "__SEARCH_FONT_BEGIN__{$stext}__SEARCH_FONT_END__", $str);
//return preg_replace("/$stext/i", "__SEARCH_FONT_BEGIN__{$stext}__SEARCH_FONT_END__", $str);
}
function get_search_font($str) {
global $default;
$source = array("/__SEARCH_FONT_BEGIN__/", "/__SEARCH_FONT_END__/");
$target = array("<span style='background-color:$default[de_search_bgcolor]'><font color='$default[de_search_color]'>", "</font></span>");
return preg_replace($source, $target, $str);
}
// TEXT 형식으로 변환
function get_text($str, $html=0)
{
$source[] = "/ /";
$target[] = " ";
$source[] = "/</";
$target[] = "<";
$source[] = "/>/";
$target[] = ">";
//$source[] = "/\"/";
//$target[] = """;
$source[] = "/\'/";
$target[] = "'";
$source[] = "/}/";
$target[] = "}";
if ($html) {
$source[] = "/\n/";
$target[] = "<br>";
}
return preg_replace($source, $target, $str);
}
// 검색 구문을 얻는다.
function get_sql_search($field, $stext)
{
$str = " and ( ";
switch ($field) {
case "wr_subject|wr_content" :
$str .= " (wr_subject like '%$stext%' or wr_content like '%$stext%') ";
break;
case "ca_id" :
$str .= " ($field = '$stext') ";
break;
case "wr_hit" :
case "wr_good" :
case "wr_nogood" :
$str .= " ($field >= '$stext') ";
break;
case "wr_num" :
$str .= " ($field = ".((-1)*$stext).") ";
break;
default :
$str .= " ($field like '%$stext%') ";
break;
}
$str .= " ) ";
return $str;
}
// 게시판 테이블에서 하나의 행을 읽음
function get_write($write, $wr_id)
{
return sql_fetch_array(" select * from $write where wr_id = '$wr_id' ");
}
// 그룹 설정 테이블에서 하나의 행을 읽음
function get_group($gr_id)
{
global $cfg;
return sql_fetch_array(" select * from $cfg[table_group] where gr_id = '$gr_id' ");
}
// 존재하는 게시판인가?
function is_board($table)
{
global $cfg;
$is = false;
$result = mysql_list_tables($cfg[mysql_db]);
for ($i=0; $i<mysql_num_rows($result); $i++) {
if ($table == mysql_tablename($result, $i)) {
$resultfield = mysql_list_fields($cfg[mysql_db], $table);
// 테이블의 첫번째 필드가 wr_id 이면 게시판 테이블이다.
if (mysql_field_name($resultfield, 0) == "wr_id") {
$is = true;
break;
}
}
}
return $is;
}
// 회원 정보를 얻는다.
function get_member($mb_id)
{
global $cfg;
$sql = " select * from $cfg[table_member]
where mb_id = TRIM('$mb_id') ";
return sql_fetch_array($sql);
}
// SQL PASSWORD 를 얻는다.
function sql_password($passwd)
{
$sql = " SELECT PASSWORD('$passwd') ";
$row = sql_fetch_array($sql);
return $row[0];
}
// way.co.kr 의 wayboard 참고
function urlautolink ($str)
{
global $default;
$str = ereg_replace("<", "\t_lt_\t", $str);
$str = ereg_replace(">", "\t_gt_\t", $str);
$str = ereg_replace("&", "&", $str);
$str = ereg_replace(""", "\"", $str);
$str = eregi_replace("([^(http://)]|\(|^)(www\.[a-zA-Z0-9\.-]+\.[\xA1-\xFEa-zA-Z0-9\.:&#=_\?/~\+%@;-]+)", "\\1<A HREF=\"http://\\2\" TARGET='$default[de_link_target]'>\\2</A>", $str);
$str = eregi_replace("([^(HREF=\"?'?)|(SRC=\"?'?)]|\(|^)((http|https|ftp|telnet|news|mms)://[a-zA-Z0-9\.-]+\.[\xA1-\xFEa-zA-Z0-9\.:&#=_\?/~\+%@;-]+)", "\\1<A HREF=\"\\2\" TARGET='$default[de_link_target]'>\\2</A>", $str);
$str = eregi_replace("([^(HREF=)]|\(|^)\"?'?([a-zA-Z0-9\._-]+@[a-zA-Z0-9\.-]+)", "\\1<A HREF=\"mailto:\\2\">\\2</A>", $str);
$str = ereg_replace("\t_lt_\t", "<", $str);
$str = ereg_replace("\t_gt_\t", ">", $str);
return $str;
}
// 스킨경로를 얻는다
function get_skin_dir($val, $reldir=".")
{
global $cfg;
$result_array = array();
$dirname = "$reldir/$cfg[dir_skin]/$val/";
$handle = opendir($dirname);
while ($file = readdir($handle)) {
if($file == "."||$file == "..") {
continue;
}
if (is_dir($dirname.$file)) {
$result_array[] = $file;
}
}
closedir($handle);
sort($result_array);
return $result_array;
}
// 리스트 제목에 정렬 넣기
function get_field_sort($subject, $field) {
global $HTTP_SERVER_VARS, $qstr, $aorder;
return "<a href='$HTTP_SERVER_VARS[PHP_SELF]?$qstr&ssort=$field&sorder=$aorder[$field]'>$subject</a>";
}
// 메일 보내기 (파일 여러개 첨부 가능)
function mailer($fname, $fmail, $to, $subject, $content, $type=0, $file="", $charset="EUC-KR", $cc="", $bcc="") {
// type : text=0, html=1, text+html=2
$fname = "=?$charset?B?" . base64_encode($fname) . "?=";
$subject = "=?$charset?B?" . base64_encode($subject) . "?=";
$charset = ($charset != "") ? "charset=$charset" : "";
$header = "Return-Path: <$fmail>\n";
$header .= "From: $fname <$fmail>\n";
$header .= "Reply-To: <$fmail>\n";
if ($cc) $header .= "Cc: $cc\n";
if ($bcc) $header .= "Bcc: $bcc\n";
$header .= "MIME-Version: 1.0\n";
$header .= "X-Mailer: sir mailer 0.9 (sir.co.kr)\n";
if ($file != "") {
$boundary = uniqid("http://sir.co.kr/");
$header .= "Content-type: MULTIPART/MIXED; BOUNDARY=\"$boundary\"\n";
$header .= "--$boundary\n";
}
if ($type) {
$header .= "Content-Type: TEXT/HTML; $charset\n";
if ($type == 2)
$content = nl2br($content);
} else {
$header .= "Content-Type: TEXT/PLAIN; $charset\n";
$content = stripslashes($content);
}
$header .= "Content-Transfer-Encoding: BASE64\n\n";
$header .= chunk_split(base64_encode($content)) . "\n";
if ($file != "") {
foreach ($file as $f) {
$header .= "\n--$boundary\n";
$header .= "Content-Type: APPLICATION/OCTET-STREAM; name=\"$f[name]\"\n";
$header .= "Content-Transfer-Encoding: BASE64\n";
$header .= "Content-Disposition: inline; filename=\"$f[name]\"\n";
$header .= "\n";
$header .= chunk_split(base64_encode($f[data]));
$header .= "\n";
}
$header .= "--$boundary--\n";
}
@mail($to, $subject, "", $header);
}
// 파일 첨부시
/*
$fp = fopen(__FILE__, "r");
$file[] = array(
"name"=>basename(__FILE__),
"data"=>fread($fp, filesize(__FILE__)));
fclose($fp);
*/
// 파일을 첨부함
function attach_file($filename, $file)
{
$fp = fopen($file, "r");
$tmpfile = array(
"name" => $filename,
"data" => fread($fp, filesize($file)));
fclose($fp);
return $tmpfile;
}
function get_admin($admin='default')
{
global $cfg, $default, $group, $board;
$is = false;
if ($admin == 'board') {
$mb = sql_fetch_array("select * from $cfg[table_member] where mb_id = '$board[bo_admin]'");
$is = true;
}
if (($is && !$mb[0]) || $admin == 'group') {
$mb = sql_fetch_array("select * from $cfg[table_member] where mb_id = '$group[gr_admin]'");
$is = true;
}
if (($is && !$mb[0]) || $admin == 'default') {
$mb = sql_fetch_array("select * from $cfg[table_member] where mb_id = '$default[de_admin]'");
}
return $mb;
}
function is_admin($mb_id)
{
global $default, $cfg;
$is = '';
if ($mb_id) {
if ($default[de_admin] == $mb_id) {
$is = 'default';
} else {
$sql = " select count(*) from $cfg[table_group] where gr_admin = '$mb_id' ";
$row = sql_fetch_array($sql);
if ($row[0] > 0) {
$is = 'group';
} else {
$sql = " select count(*) from $cfg[table_board] where bo_admin = '$mb_id' ";
$row = sql_fetch_array($sql);
if ($row[0] > 0) {
$is = 'board';
}
}
}
}
return $is;
}
// 분류 옵션을 얻음
function get_category_option($table)
{
global $cfg;
$sql = " select * from {$table}_cat order by ca_id ";
$result = sql_query_error($sql);
$str = "";
while ($row = mysql_fetch_array($result)) {
$str .= "<option value='$row[ca_id]'>$row[ca_name]</option>\n";
}
mysql_free_result($result);
return $str;
}
function get_category_name($table, $ca_id)
{
global $cfg;
$sql = " select ca_name from {$table}_cat where ca_id = '$ca_id' ";
$row = sql_fetch_array($sql);
return $row[0];
}
// 필터링
function check_filter($content)
{
global $default;
$filter = $default[de_filter];
$is_bad = false;
$pattern = explode(",", $filter);
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if ($pattern[$i] == "") {
continue;
}
$pat = "/{$pattern[$i]}/i";
$is_bad = preg_match($pat, $content);
if ($is_bad) {
break;
}
}
return $is_bad;
}
// IP 차단
function check_intercept_ip()
{
global $cfg, $HTTP_SERVER_VARS;
$is_bad = false;
$pattern = explode(",", trim($default[de_intercept_ip]));
for ($i=0; $i<count($pattern); $i++) {
$pattern[$i] = trim($pattern[$i]);
if ($pattern[$i] == "") {
continue;
}
$pat = "/^({$pattern[$i]})/";
$is_bad = preg_match($pat, $HTTP_SERVER_VARS[REMOTE_ADDR]);
if ($is_bad)
break;
}
return $is_bad;
}
function get_level_select($name, $selected='1', $event='')
{
global $cfg;
$str = "<select name='$name' $event>";
for ($i=$cfg[level_guest]; $i<=$cfg[level_max]; $i++) {
$str .= "<option value='$i'";
if ($i == $selected) {
$str .= " selected ";
}
$str .= ">$i</option>";
}
$str .= "</select>";
return $str;
}
function get_yn_select($name, $selected='1', $event='')
{
$str = "<select name='$name' $event>";
if ($selected) {
$str .= "<option value='1' selected>예</option>";
$str .= "<option value='0'>아니오</option>";
} else {
$str .= "<option value='1'>예</option>";
$str .= "<option value='0' selected>아니오</option>";
}
$str .= "</select>";
return $str;
}
function insert_point($mb_id, $point)
{
global $cfg, $default, $today;
$sql = " select mb_today_point from $cfg[table_member]
where mb_id = '$mb_id'
and TO_DAYS('$today') - TO_DAYS(mb_today_login) = 0 ";
$row = sql_fetch_array($sql);
$today_point = $row[mb_today_point];
// 하루 누적 포인트보다 작다면
if ($today_point < $default[de_day_max_point]) {
$sql = " update $cfg[table_member]
set mb_point = mb_point + '$point',
mb_today_point = mb_today_point + '$point'
where mb_id = '$mb_id' ";
sql_query_error($sql);
}
}
// 부여된 포인트를 삭제한다.
function delete_point($po_id)
{
global $cfg;
$sql = " select mb_id, po_point from $cfg[table_point] where po_id = '$po_id' ";
$po = sql_fetch_array($sql);
$sql = " delete from $cfg[table_point] where po_id = '$po_id' ";
sql_query_error($sql);
$sql = " update $cfg[table_member] set mb_point = mb_point - '$po[po_point]' where mb_id = '$po[mb_id]' ";
sql_query_error($sql);
}
// 게시판의 다음글 번호를 얻는다.
function get_next_num($table, $notice=0)
{
/*
$sql = " select min(wr_num) from $table where wr_notice = '$notice' ";
$row = sql_fetch_array($sql);
return $row[0] - 1;
*/
// 빠른 검색을 위하여 위의 코드를 아래의 코드로 대체함 (2003-03-04)
// 공지사항일 경우 공지사항에서 가장 작은 번호를 얻고
if ($notice == -1) {
$sql1 = " select min(wr_num) from $table where wr_notice = '-1' ";
$row1 = sql_fetch_array($sql1);
}
// 공지사항이 아닌글에서 가장 작은 번호를 얻어
$sql2 = " select min(wr_num) from $table where wr_notice = '0' ";
$row2 = sql_fetch_array($sql2);
// 공지사항이 하나도 없다면 공지사항이 아닌글의 번호를 주고
if (!$row1[0]) $row1[0] = $row2[0];
// 공지사항이면서 공지사항이 공지사항이 아닌글보다 작거나 같다면 공지사항의 번호를 1 뺀 값을 반환
if (($notice == -1) && ($row1[0] <= $row2[0])) {
return $row1[0] - 1;
} else { // 아니면 공지사항이 아닌글의 번호를 1 뺀 값을 반환
return $row2[0] - 1;
}
}
// 서명에 사용할 수 없는 태그를 다른 이름의 태그로 변환
function convert_signature($signature)
{
$source[] = "<script";
$source[] = "</script";
$target[] = "<x-script";
$target[] = "</x-script";
return str_replace($source, $target, $signature);
}
// 제목별로 컬럼 정렬하는 QUERY STRING
function title_sort($col, $title)
{
global $ssort, $sorder, $sselect, $stext, $page, $gr_id;
global $HTTP_SERVER_VARS;
$q1 = "ssort=$col";
$q2 = "sorder=asc";
if ($ssort == $col) {
if ($sorder == "asc") {
$q2 = "sorder=desc";
}
}
return "<a href='$HTTP_SERVER_VARS[PHP_SELF]?$q1&$q2&sselect=$sselect&stext=$stext&gr_id=$gr_id&page=$page'><font color=#ffffff>$title</font></a>";
}
// 로그인 사용자 수
function get_login_count($kind='total')
{
global $cfg;
$fr_time = date("Y-m-d H:i:s", time() - (60 * $cfg[login_minutes]));
$to_time = date("Y-m-d H:i:s", time());
$sql = " select count(lo_ip) from $cfg[table_login]
where lo_datetime between '$fr_time' and '$to_time' ";
if ($kind == 'total')
$sql .= "";
else if ($kind == 'member')
$sql .= " and mb_id != '' ";
else if ($kind == 'guest')
$sql .= " and mb_id = '' ";
$row = sql_fetch_array($sql);
return $row[0];
}
// 쪽지 레이어
function gblayer($mb_id, $name='', $email='', $homepage='', $icon=true)
{
global $cfg, $reldir, $bbsdir;
static $layerno = 0;
$layerno++;
$email = preg_replace("/@/", "@", $email);
$homepage = set_http($homepage);
$str = "<span onclick=\"gblayeraction('gblayer{$layerno}')\" style='cursor:hand;'>";
if ($mb_id) {
$mb = get_member($mb_id);
$icon_file = "$reldir/$cfg[dir_member]/$mb_id.gif";
if (file_exists($icon_file) && is_file($icon_file)) {
$size = getimagesize($icon_file);
$width = $size[0];
$height = $size[1];
if ($width > 16) {
$width = 16;
}
if ($height > 16) {
$height = 16;
}
$str .= "<img src='$icon_file' width='$width' height='$height' align=absbottom> ";
}
$str .= "<b>$name</b>";
// 정보 비공개
if (!$mb[mb_open]) {
$mb_id = "";
$email = "";
$homepage = "";
}
} else {
$str .= $name;
}
$str .= "</span>";
$dir = "$reldir/$bbsdir";
$str .= "<script language='JavaScript'>gblayer('gblayer{$layerno}', '{$mb_id}', '{$name}', '{$email}', '{$homepage}', '{$dir}');</script>";
return $str;
}
// url에 http:// 를 붙인다
function set_http($url)
{
if (!trim($url))
return;
if (!eregi("^(http|https)://", $url))
$url = "http://" . $url;
return $url;
}
// 파일을 보이게 하는 링크 (이미지, 플래쉬, 동영상)
function view_file_link($file)
{
global $cfg, $board, $reldir;
if (!$file) return;
$size = @getimagesize("$reldir/$cfg[dir_file]/$board[bo_table]/$file");
$source_width = $size[0];
$source_height = $size[1];
if ($board[bo_table_width] <= 100) {
if ($size[0] > $cfg[large_image_size]) {
$rate = $size[1] / $size[0];
$size[0] = $cfg[large_image_size];
$size[1] = (int)($size[0] * $rate);
}
} else {
if ($size[0] > $board[bo_table_width]) {
$rate = $size[1] / $size[0];
$size[0] = $board[bo_table_width];
$size[1] = (int)($size[0] * $rate);
}
}
$width = $size[0];
$height = $size[1];
if (preg_match($cfg[image_extension], $file))
return "<img src='$reldir/$cfg[dir_file]/$board[bo_table]/$file' width='$width' height='$height' border=0><p>";
else if (preg_match($cfg[flash_extension], $file))
return "<embed src='$reldir/$cfg[dir_file]/$board[bo_table]/$file' width='$width' height='$height'></embed><p>";
else if (preg_match($cfg[movie_extension], $file))
return "<embed src='$reldir/$cfg[dir_file]/$board[bo_table]/$file'></embed><p>";
}
// 현재 스크립트의 URL 을 얻는다
function get_current_url($http="http")
{
global $HTTP_SERVER_VARS;
$url = $http . "://" . $HTTP_SERVER_VARS["HTTP_HOST"] . dirname($HTTP_SERVER_VARS["PHP_SELF"]);
// 뒤에 / 로 끝나면 / 를 없애준다
return preg_replace("/(\/)$/", "", $url);
}
// 파일의 용량을 구한다.
function get_filesize($file)
{
$size = filesize(addslashes($file));
if ($size >= 1024768) {
$size = number_format($size/1024768, 1) . "M";
} else if ($size >= 1024) {
$size = number_format($size/1024, 1) . "K";
} else {
$size = number_format($size, 0) . "byte";
}
return $size;
}
function conv_subject($subject, $len, $suffix="")
{
global $sselect, $stext;
$subject = cut_str($subject, $len, $suffix);
if ($stext && preg_match("/wr_subject/", $sselect)) {
$subject = set_search_font($stext, $subject);
}
$subject = get_text($subject);
if ($stext && preg_match("/wr_subject/", $sselect)) {
$subject = get_search_font($subject);
}
return $subject;
}
// content 를 변환한다.
function conv_content($content, $html)
{
global $sselect, $stext;
if ($html) { // html 이면
$source = array ( "/<script/i", "/<\/script/i", "/javascript:/i", "/http-equiv/i" );
$target = array ( "<x-script", "</x-script", "x-javascript:", "x-http-equiv" );
if ($html == 2) { // 자동 줄바꿈
$source[] = "/\n/";
$target[] = "<br>";
}
$content = preg_replace($source, $target, $content);
} else { // text 이면
if ($stext && preg_match("/wr_content/", $sselect)) {
$content = set_search_font($stext, $content);
}
$content = get_text($content, 1);
if ($stext && preg_match("/wr_content/", $sselect)) {
$content = get_search_font($content);
}
$content = urlautolink($content);
}
return $content;
}
// 최신글을 추출한다.
function latest($skin_dir='', $bo_table, $rows=10, $len=40)
{
global $latest_skin, $cfg, $reldir, $bbsdir;
include_once "$reldir/$bbsdir/gblayer.php";
// 스킨디렉토리값이 넘어왔다면
if ($skin_dir) {
$skin_dir = "$reldir/$bbsdir/$cfg[dir_skin]/latest/$skin_dir";
} else {
$skin_dir = $latest_skin;
}
$sql = " select * from $cfg[table_board] where bo_table = '{$cfg[write_table_prefix]}{$bo_table}' ";
$bo = sql_fetch_array($sql);
$bo_subject = $bo[bo_subject];
include "$skin_dir/latest_head.skin.php";
$sql = " select *
from {$cfg[write_table_prefix]}{$bo_table}
where wr_comment = 0
order by wr_num limit 0, $rows ";
$result = sql_query_error($sql);
for ($i=0; $row = mysql_fetch_array($result); $i++) {
$wr_subject = conv_subject($row[wr_subject], $len,"…");
//$wr_name = cut_str($row[wr_name],10);
$wr_name = gblayer($row[mb_id], cut_str($row[wr_name],10), $row[wr_email], $row[wr_homepage], "$reldir/$bbsdir");
$wr_date = substr($row[wr_datetime],2,8);
$a_list_link = "$reldir/$bbsdir/gnuboard.php?bo_table=$bo_table&wr_id=$row[wr_id]";
$file1_image = "$reldir/$cfg[dir_file]/$bo_table/$row[wr_file1]"; //이미지를 보이게추가함
include "$skin_dir/latest_main.skin.php";
}
mysql_free_result($result);
$show_nodata_begin = "";
$show_nodata_end = "";
if ($i>0) {
$show_nodata_begin = "<!--";
$show_nodata_end = "-->";
}
include "$skin_dir/latest_tail.skin.php";
}
// 화면 머리부분
function head($title="", $script="")
{
global $reldir, $bbsdir, $cfg, $board, $group, $default, $member;
global $board_skin, $outlogin_skin, $member_skin, $memo_skin, $latest_skin, $dir;
global $is_admin;
global $HTTP_SERVER_VARS;
$gmnow = gmdate('D, d M Y H:i:s') . ' GMT';
header('Expires: 0'); // rfc2616 - Section 14.21
header('Last-Modified: ' . $gmnow);
header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
header('Pragma: no-cache'); // HTTP/1.0
echo "<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=euc-kr'>
<title>{$title}</title>
<link rel='stylesheet' href='{$reldir}/style.css' type='text/css'>
</head>
<body leftmargin=5 topmargin=5 {$script}>
<!-- 상단 책갈피 -->
<a name='gnuboard_head'></a>
<table width=100% cellpadding=0 cellspacing=0 border=0><tr><td>
";
if ($board[bo_include_head]) { @include $board[bo_include_head]; }
if ($board[bo_content_head]) { echo stripslashes($board[bo_content_head]); }
}
// 화면 꼬리부분
function tail()
{
global $reldir, $bbsdir, $cfg, $board;
if ($board[bo_content_tail]) { echo stripslashes($board[bo_content_tail]); }
if ($board[bo_include_tail]) { @include $board[bo_include_tail]; }
echo "
</td></tr></table>
<script language='JavaScript' src='{$reldir}/wrest.js'></script>
</body>
</html>";
}
// 자바스크립트에서 go(-1) 또는 back() 함수를 쓰면 폼값이 사라질때 해당 폼의 상단에 사용하면
// 캐쉬의 내용을 가져옴. 완전한지는 검증되지 않음
function header_cache()
{
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("cache-contril: no-cache,must-revalidate");
header("pragma: no-cache") ;
}
// 폴더의 용량 ($dir는 / 없이 넘기세요)
function dirsize($dir)
{
$size = 0;
$d = dir($dir);
while ($entry = $d->read()) {
if ($entry != "." && $entry != "..") {
$size += filesize("$dir/$entry");
}
}
$d->close();
return $size;
}
// HTML 특수문자 변환 htmlspecialchars
function htmlspecialchars2($str)
{
$trans = array("\"" => """, "'" => "'", "<"=>"<", ">"=>">");
$str = strtr($str, $trans);
return $str;
}
//------------------------------------------------------------
// 공통
//------------------------------------------------------------
if (!$select_db) {
return;
}
// 로그인중이라면
if ($HTTP_SESSION_VARS[ss_mb_id]) {
$member = get_member($HTTP_SESSION_VARS[ss_mb_id]);
// 읽지 않은 쪽지가 있다면
$sql = " select count(*) from $cfg[table_memo]
where me_recv_mb_id = '$member[mb_id]'
and me_read_datetime = '0000-00-00 00:00:00' ";
$row = sql_fetch_array($sql);
$memo_not_read = $row[0];
} else {
unset($member);
}
// 회원자료가 없다면 (로그인이 아니라면 또는 회원이 아니라면)
if (!$member[mb_id]) {
$member[mb_level] = $cfg[level_guest];
}
$sql = " insert into $cfg[table_login]
set lo_ip = '$HTTP_SERVER_VARS[REMOTE_ADDR]',
mb_id = '$member[mb_id]',
lo_datetime = '$now' ";
$result = mysql_query($sql);
if (!$result) {
$sql = " update $cfg[table_login]
set mb_id = '$member[mb_id]',
lo_datetime = '$now'
where lo_ip = '$HTTP_SERVER_VARS[REMOTE_ADDR]' ";
mysql_query($sql);
}
// 시간이 지난 접속은 삭제한다
$deltime = date("Y-m-d H:i:s", time() - (60 * $cfg[login_minutes]));
$sql = " delete from $cfg[table_login] where lo_datetime < '$deltime' ";
mysql_query($sql);
if (isset($bo_table)) {
$write_table = $cfg[write_table_prefix] . $bo_table; // 게시판 테이블 전체이름
$board = sql_fetch_array(" select * from $cfg[table_board] where bo_table = '$bo_table' ");
if ($board[0]) {
$gr_id = $board[gr_id];
if ($wr_id) {
$write = sql_fetch_array(" select * from $write_table where wr_id = '$wr_id' ");
}
}
}
if ($gr_id) {
$group = sql_fetch_array(" select * from $cfg[table_group] where gr_id = '$gr_id' ");
}
//===================================
// 공용 변수
//===================================
// 기본환경설정
$default = sql_fetch_array(" select * from $cfg[table_default] ");
// 스킨 디렉토리
$board_skin = "$reldir/$bbsdir/$cfg[dir_skin]/board/$board[bo_skin]"; // 게시판 스킨경로
$outlogin_skin = "$reldir/$bbsdir/$cfg[dir_skin]/outlogin/$default[de_outlogin_skin]"; // 아웃로그인 스킨경로
$member_skin = "$reldir/$bbsdir/$cfg[dir_skin]/member/$default[de_member_skin]"; // 회원가입, 로그인, 비밀번호 분실 스킨경로
$memo_skin = "$reldir/$bbsdir/$cfg[dir_skin]/memo/$default[de_memo_skin]"; // 쪽지 스킨경로
$latest_skin = "$reldir/$bbsdir/$cfg[dir_skin]/latest/$default[de_latest_skin]"; // 최신글 스킨경로
$dir = $board_skin; // $board_skin 을 사용해야 하지만 기존 스킨과의 호환을 위하여 그냥 놔둠
// QUERY_STRING
$qstr = "";
if (isset($bo_table)) $qstr .= "bo_table=$bo_table";
if (isset($sselect)) $qstr .= "&sselect=$sselect";
if (isset($stext)) $qstr .= "&stext=$stext";
if (isset($section)) $qstr .= "§ion=$section";
// 관리자인가?
$is_admin = is_admin($member[mb_id]);
//===================================
// 개발자(사용자) 함수 및 변수 라이브러리
@include_once "libdev.inc.php";
?>
|
댓글을 작성하시려면 로그인이 필요합니다.
로그인
댓글 4개
( 이미지를 보이게추가함 ) 을 찾으시면 됩니다.
왜냐면.. 저는 틀리거든요..
그래서..수정부분만..갈켜 주시면 되는데.. 미안해서 어쩌지요..
저는 덮어쓰면.. 다른게 안되거든요..
죄송하지만.. 수정부분이 어딘지만.. 갈켜 주실수는 없는지요?