1) { $str .= "처음"; //$str .= "[이전]"; } $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 .= "  이전"; if ($total_page > 1) { for ($k=$start_page;$k<=$end_page;$k++) { if ($cur_page != $k) $str .= "  $k"; else $str .= "  $k "; } } if ($total_page > $end_page) $str .= "  다음"; if ($cur_page < $total_page) { //$str .= "[다음]"; $str .= "  맨끝"; } $str .= ""; return $str; } // 변수 또는 배열의 이름과 값을 얻어냄. print_r() 함수의 변형 function print_r2($var) { ob_start(); print_r($var); $str = ob_get_contents(); ob_end_clean(); $str = preg_replace("/ /", " ", $str); echo nl2br("$str"); } // 메타태그를 이용한 URL 이동 // header("location:URL") 을 대체 function goto_url($url) { /* if (preg_match("/MSIE/", $_SERVER[HTTP_USER_AGENT])) echo ""; else echo ""; */ //header("Location:$url"); //flush(); //if (!headers_sent()) // header("Location:$url"); //else //echo ""; echo ""; exit; } // 세션변수 생성 function set_session($session_name, $value) { if (PHP_VERSION < '5.3.0') session_register($session_name); // PHP 버전별 차이를 없애기 위한 방법 $$session_name = $_SESSION["$session_name"] = $value; } // 세션변수값 얻음 function get_session($session_name) { return $_SESSION[$session_name]; } // 쿠키변수 생성 function set_cookie($cookie_name, $value, $expire) { global $config; setcookie(md5($cookie_name), base64_encode($value), $config[server_time] + $expire, '/', $config[cookie_domain]); } // 쿠키변수값 얻음 function get_cookie($cookie_name) { return base64_decode($_COOKIE[md5($cookie_name)]); } function delete_cookie($name = '', $prefix = '') { set_cookie($name, '', "- 86500"); } // 경고메세지를 경고창으로 function alert($msg='', $url='') { global $config; if (!$msg) $msg = '올바른 방법으로 이용해 주십시오.'; //header("Content-Type: text/html; charset=$config[charset]"); echo ""; echo ""; if ($url) // 4.06.00 : 불여우의 경우 아래의 코드를 제대로 인식하지 못함 //echo ""; goto_url($url); exit; } // 경고메세지 출력후 창을 닫음 function alert_close($msg) { global $config; echo ""; echo ""; exit; } // way.co.kr 의 wayboard 참고 function url_auto_link($str) { global $config; // 속도 향상 031011 $str = preg_replace("/</", "\t_lt_\t", $str); $str = preg_replace("/>/", "\t_gt_\t", $str); $str = preg_replace("/&/", "&", $str); $str = preg_replace("/"/", "\"", $str); $str = preg_replace("/ /", "\t_nbsp_\t", $str); $str = preg_replace("/([^(http:\/\/)]|\(|^)(www\.[^[:space:]]+)/i", "\\1\\2", $str); $str = preg_replace("/([^(HREF=\"?'?)|(SRC=\"?'?)]|\(|^)((http|https|ftp|telnet|news|mms):\/\/[a-zA-Z0-9\.-]+\.[\xA1-\xFEa-zA-Z0-9\.:&#=_\?\/~\+%@;\-\|\,]+)/i", "\\1\\2", $str); // 이메일 정규표현식 수정 061004 //$str = preg_replace("/(([a-z0-9_]|\-|\.)+@([^[:space:]]*)([[:alnum:]-]))/i", "\\1", $str); $str = preg_replace("/([0-9a-z]([-_\.]?[0-9a-z])*@[0-9a-z]([-_\.]?[0-9a-z])*\.[a-z]{2,4})/i", "\\1", $str); $str = preg_replace("/\t_nbsp_\t/", " " , $str); $str = preg_replace("/\t_lt_\t/", "<", $str); $str = preg_replace("/\t_gt_\t/", ">", $str); return $str; } // url에 http:// 를 붙인다 function set_http($url) { if (!trim($url)) return; if (!preg_match("/^(http|https|ftp|telnet|news|mms)\:\/\//i", $url)) $url = "http://" . $url; return $url; } // 파일의 용량을 구한다. //function get_filesize($file) function get_filesize($size) { //$size = @filesize(addslashes($file)); if ($size >= 1048576) { $size = number_format($size/1048576, 1) . "M"; } else if ($size >= 1024) { $size = number_format($size/1024, 1) . "K"; } else { $size = number_format($size, 0) . "byte"; } return $size; } // 게시글에 첨부된 파일을 얻는다. (배열로 반환) function get_file($bo_table, $wr_id) { global $config, $qstr; $file["count"] = 0; $sql = " select * from $config[board_file_table] where bo_table = '$bo_table' and wr_id = '$wr_id' order by bf_no "; $result = sql_query($sql); while ($row = sql_fetch_array($result)) { $no = $row[bf_no]; $file[$no][href] = "./download.php?bo_table=$bo_table&wr_id=$wr_id&no=$no" . $qstr; $file[$no][download] = $row[bf_download]; // 4.00.11 - 파일 path 추가 $file[$no][path] = "$config[path]/data/file/$bo_table"; //$file[$no][size] = get_filesize("{$file[$no][path]}/$row[bf_file]"); $file[$no][size] = get_filesize($row[bf_filesize]); //$file[$no][datetime] = date("Y-m-d H:i:s", @filemtime("$config[path]/data/file/$bo_table/$row[bf_file]")); $file[$no][datetime] = $row[bf_datetime]; $file[$no][source] = addslashes($row[bf_source]); $file[$no][bf_content] = $row[bf_content]; $file[$no][content] = get_text($row[bf_content]); //$file[$no][view] = view_file_link($row[bf_file], $file[$no][content]); $file[$no][view] = view_file_link($row[bf_file], $row[bf_width], $row[bf_height], $file[$no][content]); $file[$no][file] = $row[bf_file]; // prosper 님 제안 //$file[$no][imgsize] = @getimagesize("{$file[$no][path]}/$row[bf_file]"); $file[$no][image_width] = $row[bf_width] ? $row[bf_width] : 640; $file[$no][image_height] = $row[bf_height] ? $row[bf_height] : 480; $file[$no][image_type] = $row[bf_type]; $file["count"]++; } return $file; } // 폴더의 용량 ($dir는 / 없이 넘기세요) function get_dirsize($dir) { $size = 0; $d = dir($dir); while ($entry = $d->read()) { if ($entry != "." && $entry != "..") { $size += filesize("$dir/$entry"); } } $d->close(); return $size; } /************************************************************************* ** ** 그누보드 관련 함수 모음 ** *************************************************************************/ // 게시물 정보($write_row)를 출력하기 위하여 $list로 가공된 정보를 복사 및 가공 function get_list($write_row, $board, $skin_path, $subject_len=40) { global $config, $config; global $qstr, $page; //$t = get_microtime(); // 배열전체를 복사 $list = $write_row; unset($write_row); $list['is_notice'] = preg_match("/[^0-9]{0,1}{$list['wr_id']}[\r]{0,1}/",$board['bo_notice']); if ($subject_len) $list['subject'] = conv_subject($list['wr_subject'], $subject_len, "…"); else $list['subject'] = conv_subject($list['wr_subject'], $board['bo_subject_len'], "…"); // 목록에서 내용 미리보기 사용한 게시판만 내용을 변환함 (속도 향상) : kkal3(커피)님께서 알려주셨습니다. if ($board['bo_use_list_content']) { $html = 0; if (strstr($list['wr_option'], "html1")) $html = 1; else if (strstr($list['wr_option'], "html2")) $html = 2; $list['content'] = conv_content($list['wr_content'], $html); } $list['comment_cnt'] = ""; if ($list['wr_comment']) $list['comment_cnt'] = "($list[wr_comment])"; // 당일인 경우 시간으로 표시함 $list['datetime'] = substr($list['wr_datetime'],0,10); $list['datetime2'] = $list['wr_datetime']; if ($list['datetime'] == $config['time_ymd']) $list['datetime2'] = substr($list['datetime2'],11,5); else $list['datetime2'] = substr($list['datetime2'],5,5); // 4.1 $list['last'] = substr($list['wr_last'],0,10); $list['last2'] = $list['wr_last']; if ($list['last'] == $config['time_ymd']) $list['last2'] = substr($list['last2'],11,5); else $list['last2'] = substr($list['last2'],5,5); $list['wr_homepage'] = get_text(addslashes($list['wr_homepage'])); $tmp_name = get_text(cut_str($list['wr_name'], $config['cf_cut_name'])); // 설정된 자리수 만큼만 이름 출력 if ($board['bo_use_sideview']) $list['name'] = get_sideview($list['mb_id'], $tmp_name, $list['wr_email'], $list['wr_homepage']); else $list['name'] = "$tmp_name"; $reply = $list['wr_reply']; $list['reply'] = ""; if (strlen($reply) > 0) { for ($k=0; $k= date("Y-m-d H:i:s", $config['server_time'] - ($board['bo_new'] * 3600))) $list['icon_new'] = ""; $list['icon_hot'] = ""; if ($list['wr_hit'] >= $board['bo_hot']) $list['icon_hot'] = ""; $list['icon_secret'] = ""; if (strstr($list['wr_option'], "secret")) $list['icon_secret'] = ""; // 링크 for ($i=1; $i<=$config['link_count']; $i++) { $list['link'][$i] = set_http(get_text($list["wr_link{$i}"])); $list['link_href'][$i] = "$config[bbs_path]/link.php?bo_table=$board[bo_table]&wr_id=$list[wr_id]&no=$i" . $qstr; $list['link_hit'][$i] = (int)$list["wr_link{$i}_hit"]; } // 가변 파일 $list['file'] = get_file($board['bo_table'], $list['wr_id']); if ($list['file']['count']) $list['icon_file'] = ""; return $list; } // get_list 의 alias function get_view($write_row, $board, $skin_path, $subject_len=125) { return get_list($write_row, $board, $skin_path, $subject_len); } // set_search_font(), get_search_font() 함수를 search_font() 함수로 대체 function search_font($stx, $str) { global $config; // 문자앞에 \ 를 붙입니다. $src = array("/", "|"); $dst = array("\/", "\|"); if (!trim($stx)) return $str; // 검색어 전체를 공란으로 나눈다 $s = explode(" ", $stx); // "/(검색1|검색2)/i" 와 같은 패턴을 만듬 $pattern = ""; $bar = ""; for ($m=0; $m)"; $bar = "|"; } // 지정된 검색 폰트의 색상, 배경색상으로 대체 $replace = "\\1"; return preg_replace("/($pattern)/i", $replace, $str); } // 제목을 변환 function conv_subject($subject, $len, $suffix="") { return cut_str(get_text($subject), $len, $suffix); } // 내용을 변환 function conv_content($content, $html) { global $config, $board; if ($html) { $source = array(); $target = array(); $source[] = "//"; $target[] = ""; if ($html == 2) { // 자동 줄바꿈 $source[] = "/\n/"; $target[] = "
"; } /* if ($board[bo_disable_tags]) { //$source[] = "/(\<)([\/]?)($board[bo_disable_tags])/i"; // 태그에만 적용하던것을 속성(프로퍼티)에도 적용하도록 수정 $source[] = "/([\<]?)([\/]?)($board[bo_disable_tags])/i"; $target[] = "$1$2$3-x"; //$source[] = "/^/"; //$target[] = "이 페이지는 사용금지 태그 사용으로 인하여 정상 출력되지 않을 수 있습니다.

"; } */ // 테이블 태그의 갯수를 세어 테이블이 깨지지 않도록 한다. $table_begin_count = substr_count(strtolower($content), "$2", $content); //$content = preg_replace("/(on)([^\=]+)/i", "on$2", $content); $content = preg_replace("/(on)([a-z]+)([^a-z]*)(\=)/i", "on$2$3$4", $content); $content = preg_replace("/(dy)(nsrc)/i", "dy$2", $content); $content = preg_replace("/(lo)(wsrc)/i", "lo$2", $content); $content = preg_replace("/(sc)(ript)/i", "sc$2", $content); $content = preg_replace("/(ex)(pression)/i", "ex$2", $content); /* $content = preg_replace("/\#/", "#", $content); $content = preg_replace("/\/", ">", $content); $content = preg_replace("/\(/", "(", $content); $content = preg_replace("/\)/", ")", $content); */ } else // text 이면 { // & 처리 : &   등의 코드를 정상 출력함 $content = html_symbol($content); // 공백 처리 //$content = preg_replace("/ /", "  ", $content); $content = str_replace(" ", "  ", $content); $content = str_replace("\n ", "\n ", $content); $content = get_text($content, 1); $content = url_auto_link($content); } return $content; } // 날짜, 조회수의 경우 높은 순서대로 보여져야 하므로 $flag 를 추가 // $flag : asc 낮은 순서 , desc 높은 순서 // 제목별로 컬럼 정렬하는 QUERY STRING function subject_sort_link($col, $query_string='', $flag='asc') { global $sst, $sod, $sfl, $stx, $page; $q1 = "sst=$col"; if ($flag == 'asc') { $q2 = 'sod=asc'; if ($sst == $col) { if ($sod == 'asc') { $q2 = 'sod=desc'; } } } else { $q2 = 'sod=desc'; if ($sst == $col) { if ($sod == 'desc') { $q2 = 'sod=asc'; } } } return ""; } // 관리자 정보를 얻음 function get_admin($admin='super') { global $config, $group, $board; global $config; $is = false; if ($admin == 'board') { $mb = sql_fetch("select * from $config[member_table] where mb_id in ('$board[bo_admin]') limit 1 "); $is = true; } if (($is && !$mb[mb_id]) || $admin == 'group') { $mb = sql_fetch("select * from $config[member_table] where mb_id in ('$group[gr_admin]') limit 1 "); $is = true; } if (($is && !$mb[mb_id]) || $admin == 'super') { $mb = sql_fetch("select * from $config[member_table] where mb_id in ('$config[cf_admin]') limit 1 "); } return $mb; } // 관리자인가? function is_admin($mb_id) { global $config, $group, $board; if (!$mb_id) return; if ($config['cf_admin'] == $mb_id) return 'super'; if ($group['gr_admin'] == $mb_id) return 'group'; if ($board['bo_admin'] == $mb_id) return 'board'; return ''; } // 분류 옵션을 얻음 // 4.00 에서는 카테고리 테이블을 없애고 보드테이블에 있는 내용으로 대체 function get_category_option($bo_table='') { global $config, $board; /* $sql = " select bo_category_list from $config[board_table] where bo_table = '$bo_table' "; $row = sql_fetch($sql); $arr = explode("|", $row[bo_category_list]); // 구분자가 , 로 되어 있음 */ $arr = explode("|", $board[bo_category_list]); // 구분자가 , 로 되어 있음 $str = ""; for ($i=0; $i$name"; } } $title_mb_id = "[$mb_id]"; } else { $tmp_name = "$name"; $title_mb_id = "[비회원]"; } return "$tmp_name"; } // 파일을 보이게 하는 링크 (이미지, 플래쉬, 동영상) function view_file_link($file, $width, $height, $content="") { global $config, $board; global $config; static $ids; if (!$file) return; $ids++; // 파일의 폭이 게시판설정의 이미지폭 보다 크다면 게시판설정 폭으로 맞추고 비율에 따라 높이를 계산 if ($width > $board[bo_image_width] && $board[bo_image_width]) { $rate = $board[bo_image_width] / $width; $width = $board[bo_image_width]; $height = (int)($height * $rate); } // 폭이 있는 경우 폭과 높이의 속성을 주고, 없으면 자동 계산되도록 코드를 만들지 않는다. if ($width) $attr = " width='$width' height='$height' "; else $attr = ""; if (preg_match("/\.($config[cf_image_extension])$/i", $file)) // 이미지에 속성을 주지 않는 이유는 이미지 클릭시 원본 이미지를 보여주기 위한것임 // 게시판설정 이미지보다 크다면 스킨의 자바스크립트에서 이미지를 줄여준다 return ""; else if (preg_match("/\.($config[cf_flash_extension])$/i", $file)) //return ""; return ""; //============================================================================================= // 동영상 파일에 악성코드를 심는 경우를 방지하기 위해 경로를 노출하지 않음 //--------------------------------------------------------------------------------------------- /* else if (preg_match("/\.($config[cf_movie_extension])$/i", $file)) //return ""; return ""; */ //============================================================================================= } // view_file_link() 함수에서 넘겨진 이미지를 보이게 합니다. // {img:0} ... {img:n} 과 같은 형식 function view_image($view, $number, $attribute) { if ($view['file'][$number]['view']) return preg_replace("/>$/", " $attribute>", $view['file'][$number]['view']); else //return "{".$number."번 이미지 없음}"; return ""; } /* // {link:0} ... {link:n} 과 같은 형식 function view_link($view, $number, $attribute) { global $config; if ($view[link][$number][link]) { if (!preg_match("/target/i", $attribute)) $attribute .= " target='$config[cf_link_target]'"; return "{$view[link][$number][link]}"; } else return "{".$number."번 링크 없음}"; } */ // 한글 한글자(2byte, 유니코드 3byte)는 길이 2, 공란.영숫자.특수문자는 길이 1 // 유니코드는 http://configuni.winnwe.net/bbs/board.php?bo_table=configuni_faq&wr_id=7 의 Mr.Learn님의 글을 참고하였습니다. function cut_str($str, $len, $suffix="…") { global $config; $s = substr($str, 0, $len); $cnt = 0; for ($i=0; $i 127) $cnt++; if (strtoupper($config['charset']) == 'UTF-8') $s = substr($s, 0, $len - ($cnt % 3)); else $s = substr($s, 0, $len - ($cnt % 2)); if (strlen($s) >= strlen($str)) $suffix = ""; return $s . $suffix; } // TEXT 형식으로 변환 function get_text($str, $html=0) { /* 3.22 막음 (HTML 체크 줄바꿈시 출력 오류때문) $source[] = "/ /"; $target[] = "  "; */ // 3.31 // TEXT 출력일 경우 &   등의 코드를 정상으로 출력해 주기 위함 if ($html == 0) { $str = html_symbol($str); } $source[] = "//"; $target[] = ">"; //$source[] = "/\"/"; //$target[] = """; $source[] = "/\'/"; $target[] = "'"; //$source[] = "/}/"; $target[] = "}"; if ($html) { $source[] = "/\n/"; $target[] = "
"; } return preg_replace($source, $target, $str); } /* // HTML 특수문자 변환 htmlspecialchars function hsc($str) { $trans = array("\"" => """, "'" => "'", "<"=>"<", ">"=>">"); $str = strtr($str, $trans); return $str; } */ // 3.31 // HTML SYMBOL 변환 //   & · 등을 정상으로 출력 function html_symbol($str) { return preg_replace("/\&([a-z0-9]{1,20}|\#[0-9]{0,3});/i", "&\\1;", $str); } // 리퍼러 체크 function referer_check($url="") { /* // 제대로 체크를 하지 못하여 주석 처리함 global $config; if (!$url) $url = $config[url]; if (!preg_match("/^http[s]?:\/\/".$_SERVER[HTTP_HOST]."/", $_SERVER[HTTP_REFERER])) alert("제대로 된 접근이 아닌것 같습니다.", $url); */ } // 한글 요일 function get_yoil($date, $full=0) { $arr_yoil = array ("일", "월", "화", "수", "목", "금", "토"); $yoil = date("w", strtotime($date)); $str = $arr_yoil[$yoil]; if ($full) { $str .= "요일"; } return $str; } // 날짜를 select 박스 형식으로 얻는다 function date_select($date, $name="") { global $config; $s = ""; if (substr($date, 0, 4) == "0000") { $date = $config[time_ymdhis]; } preg_match("/([0-9]{4})-([0-9]{2})-([0-9]{2})/", $date, $m); // 년 $s .= ""; else $result .= ""; } } return $result; } function PageReturn($action,$reform, $msg=null) { print <<<__EOT__

"$reform"
__EOT__; exit; } } // ########################################################################### ?> js = new JavaScript(); } /** * Stylesheet, JavaScript 파일 삽입용 HTML 코드 생성 * * @access public * @param array css 또는 js 파일명(단독 파일의 경우 string) * @return string 생성된 HTML 코드 * @see MakeHead() */ function GetHead ($files) { // 열거된 파일의 분류(css, js)별로 HTML 삽입코드 생성 if (is_array($files)) { foreach ($files as $file) $str .= $this->MakeHead($file); return $str; } else if ($files != NULL) return $this->MakeHead($files); } /** * , \n __EOT__; else return <<<__EOT__ $file __EOT__; } /** * 인자에 해당 하는 항목의 값을 GET 또는 POST 정보로 해석 * * 우선순위 : GET, POST * * @access public * @param array 인자명(단독 인자인 경우 string) * @return array 해석된 정보(단독 인자인 경우 string) * @see PostGet(), VarParsing() */ function GetPost ($arg) { return $this->VarParsing($arg, array("GET", "POST")); } /** * 인자에 해당 하는 항목의 값을 POST 또는 GET 정보로 해석 * * 우선순위 : POST, GET * * @access public * @param array 인자명(단독 인자인 경우 string) * @return array 해석된 정보(단독 인자인 경우 string) * @see GetPost(), VarParsing() */ function PostGet ($arg) { return $this->VarParsing($arg, array("POST", "GET")); } /** * 우선순위에 따라 POST 또는 GET 정보 실제 해석 * * @access private * @param array GetPost() 또는 PostGet() 으로부터 넘겨받은 인자 * @param array 우선순위 * @return array 해석된 정보(단독 인자인 경우 string) * @see GetPost(), PostGet() */ function VarParsing ($arg, $priority) { GLOBAL $_POST; GLOBAL $_GET; if (is_array($arg)) { $array_return = true; $result = array(); } else { $arg = array($arg); $array_return = false; $result = NULL; } if (is_array($arg) && is_array($priority)) { foreach ($arg as $field) { foreach (array_reverse($priority) as $nice) { if($nice == 'POST') $tmp = $_POST[$field]; else $tmp = $_GET[$field]; // $tmp = ${"HTTP_$nice" . "_VARS"}[$field]; if ($tmp != NULL) { if ($array_return) $result[$field] = $tmp; else $result = $tmp; } } } return $result; } } function VariParsing () { GLOBAL $_POST; GLOBAL $_GET; foreach ($_GET as $field => $value) { $result[$field] = $value; } foreach ($_POST as $field => $value) { $result[$field] = $value; } return $result; } /** * 접속자의 IP 주소 정보를 얻는 함수 * * @access public * @return string IP 주소 정보 */ function GetIP () { if ( $_SERVER[HTTP_VIA] != NULL || $_SERVER[HTTP_FORWARDED] != NULL) { if ( $_SERVER[HTTP_CLIENT_IP] != NULL) { $ipaddress = $_SERVER[HTTP_CLIENT_IP]; } elseif ( $_SERVER[HTTP_X_FORWARDED_FOR] != NULL ) { $ipaddress = $_SERVER[HTTP_X_FORWARDED_FOR]; } else { $ipaddress = NULL; } } if ($ipaddress == NULL) { $ipaddress = $_SERVER[REMOTE_ADDR]; } return $ipaddress; } /** * 접속자의 브라우저 정보를 얻는 함수 * * @access public * @return array 브라우저 정보 연관배열($array) * $array[agent] : 브라우져 전체 정보 * $array[name] : 브라우져 코드(IE, NC) * $array[lang] : 브라우져 기본 언어 */ function GetBrowser () { $agent = $_SERVER[HTTP_USER_AGENT]; $browser[agent] = $agent; if (ereg("MSIE", $agent)) { $browser[name] = "IE"; } elseif (eregi("^Mozilla", $agent)) { $browser[name] = "NC"; if (eregi("\[KO\]", $agent)) { $browser[lang] = "KR"; } } return $browser; } ////// 인증체크 //////////////////////////////////////////////////////////// function login_auth() { if(!$_SESSION["ss_mb_id"]) { $url = "login.php"; print <<<__EOT__ __EOT__; exit; } } ################################################################################## //
태그 생성 ################################################################################## function make_br($str) { $str = str_replace("\r\n", "
", $str); $str = str_replace("\n", "
", $str); return $str; } function print_select($value, $option, $start="", $end="") { if($option) { while(list($key, $val) = each($option)) { $result .= ($value == $key) ? "