플록님의 글처럼 수정된 lib.inc.php 입니다.... 정보
그누보드 플록님의 글처럼 수정된 lib.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";
?>
@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";
?>
댓글 전체
쉽게 찾으실려면 키보드의 ctrl + f 키를 누르면 창이 하나 나옵니다 찾을 문자열에서
( 이미지를 보이게추가함 ) 을 찾으시면 됩니다.
( 이미지를 보이게추가함 ) 을 찾으시면 됩니다.
윗 소스에서 //이미지를 보이게추가함 --> 이글자가 있는 부분이 수정되는 부분입니다.
bbking 님 저는 덮어쓰면 안되요..
왜냐면.. 저는 틀리거든요..
그래서..수정부분만..갈켜 주시면 되는데.. 미안해서 어쩌지요..
저는 덮어쓰면.. 다른게 안되거든요..
죄송하지만.. 수정부분이 어딘지만.. 갈켜 주실수는 없는지요?
왜냐면.. 저는 틀리거든요..
그래서..수정부분만..갈켜 주시면 되는데.. 미안해서 어쩌지요..
저는 덮어쓰면.. 다른게 안되거든요..
죄송하지만.. 수정부분이 어딘지만.. 갈켜 주실수는 없는지요?
위에걸 몽땅 카피하신후 lib.inc.php을 열어 덮어 주시기 바랍니다.