03. function.php
구현에 필요한 여러가지 함수를 모아놓은 파일입니다.
함수별로 설명하겠습니다.
alert
function alert($msg = '', $url = '') { if (empty($msg)) { $msg = '잘못된 접근입니다'; } echo '<meta http-equiv="content-type" content="text/html; charset=utf-8">'; echo '<script type="text/javascript">alert("' . $msg . '");'; if (empty($url)) { echo 'history.go(-1);'; } if ($url) { echo 'document.location.href="' . $url . '"'; } echo '</script>'; exit; }
javascript Alert 창을 띄우고 지정한 페이지로 이동하는 함수입니다.
url을 지정하지 않으면 뒤로가기를 실행합니다.
cut_str
function cut_str($str = '', $len = '', $suffix = '…') { $arr_str = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY); $str_len = count($arr_str); if ($str_len >= $len) { $slice_str = array_slice($arr_str, 0, $len); $str = join('', $slice_str); return $str . ($str_len > $len ? $suffix : ''); } else { $str = join('', $arr_str); return $str; } }
지정한 글자수로 텍스트를 자르는 함수입니다.
array_map_deep
function array_map_deep($fn, $array) { if(is_array($array)) { foreach($array as $key => $value) { if(is_array($value)) { $array[$key] = array_map_deep($fn, $value); } else { $array[$key] = call_user_func($fn, $value); } } } else { $array = call_user_func($fn, $array); } return $array; }
배열에 들어있는 각 값에 특정함수를 적용시킨후 반환하는 함수입니다.
앞선 포스팅 common.php 에서 서버 변수를 처리하면서 사용하는 함수입니다.
sql_escape_string
function sql_escape_string($str) { $str = preg_replace('/(and|or).*(union|select|insert|update|delete|from|where|limit|create|drop).*/i', '', $str); $str = call_user_func('addslashes', $str); return $str; }
SQL 공격을 방어하기 위해 특정 명령어를 처리하고, addslashes 함수를 적용하는 함수입니다.
common.php 에서 서버 변수를 처리하면서 사용하는 함수입니다.
current_url
function current_url() { global $_SERVER; return BASEURL.preg_replace("`\/[^/]*\.php$`i", "", $_SERVER['PHP_SELF']).$_SERVER['REQUEST_URI']; }
현재 페이지의 URI 를 반환합니다. ( URL + Parameter)
sns_datetime
function sns_datetime($date) { if(! is_numeric($date)) { $date = strtotime($date); } $gap = time() - $date; if($gap < 60) { $posting_time = "방금"; } elseif($gap >= 60 and $gap < 3600) { $posting_time = floor($gap/60)."분 전"; } elseif($gap >= 3600 and $gap < 86400) { $posting_time = floor($gap/3600)."시간 전"; } elseif($gap >= 86400 and $gap < 259200) { $posting_time = floor($gap/86400)."일 전"; } else { $posting_time = date("Y.m.d", $date); } return $posting_time; }
날짜형식또는 unix_timestamp를 sns 형식처럼 변환하여 반환하는 함수입니다.
get_pagination
function get_pagination($page, $total_page, $add_param) { // 만약 총 페이지가 0 이면 총 페이지는 1로 다시 설정 if ($total_page == 0) $total_page =1; // 한번에 표시할 페이지 $page_scale=5; // 최종 리턴할 문자열 생성 $str = ""; // 한번에 표시할 페이지중 가장 처음 페이지와 가장 마지막 페이지 계산 $start_page = ((ceil($page/$page_scale)-1)*$page_scale)+1; $end_page = $start_page + $page_scale-1; // 가장 마지막페이지가 총 페이지보다 크면 마지막페이지를 총 페이지로 if($end_page >= $total_page) : $end_page = $total_page; endif; // 처음 버튼 만들기 if($page > 1) : $str .= '<li><a href="?page=1">처음</a></li>'; else : $str .= '<li class="disabled"><span>처음</span></li>'; endif; // 이전 버튼 만들기 if ($start_page > 1) : $str .= '<li><a href="?page='.($start_page-1).'">이전</a></li>'; else : $str .= '<li class="disabled"><span>이전</span></li>'; endif; // 각 페이지 번호 만들기 for ($i=$start_page; $i<=$end_page; $i++) : if ($page == $i) : $str .= "<li class=\"current active\"><span>{$i}</span></li>"; else : $str .= '<li><a href="?page='.$i.'">'.$i.'</a></li>'; endif; endfor; // 다음 버튼 만들기 if ($total_page > $end_page) : $str .= '<li><a href="?page='.($end_page+1).'">다음</a></li>'; else : $str .= '<li class="disabled"><span>다음</span></li>'; endif; if ($page < $total_page) : $str .= '<li><a href="?page='.$total_page.'">마지막</a></li>'; else : $str .= '<li class="disabled"><span>마지막</span></li>'; endif; $str = "<ul class=\"pagination\">{$str}</ul>"; return $str; }
페이지네이션을 생성하기 위한 함수입니다.
완성된 파일입니다.
<?php /* * Javascript Alert 창을 띄우고 지정한 URL로 이동 */ function alert($msg = '', $url = '') { if (empty($msg)) { $msg = '잘못된 접근입니다'; } echo '<meta http-equiv="content-type" content="text/html; charset=utf-8">'; echo '<script type="text/javascript">alert("' . $msg . '");'; if (empty($url)) { echo 'history.go(-1);'; } if ($url) { echo 'document.location.href="' . $url . '"'; } echo '</script>'; exit; } /* * 글자수 자르기 */ function cut_str($str = '', $len = '', $suffix = '…') { $arr_str = preg_split("//u", $str, -1, PREG_SPLIT_NO_EMPTY); $str_len = count($arr_str); if ($str_len >= $len) { $slice_str = array_slice($arr_str, 0, $len); $str = join('', $slice_str); return $str . ($str_len > $len ? $suffix : ''); } else { $str = join('', $arr_str); return $str; } } /** * 현재 URI를 반환합니다. */ function current_url() { global $_SERVER; return BASEURL.preg_replace("`\/[^/]*\.php$`i", "", $_SERVER['PHP_SELF']).$_SERVER['REQUEST_URI']; } /** * 배열에 들어있는 각 값에 특정한 함수를 적용 시키고, * 적용된 값이 들어있는 배열을 반환한다. * * @param string $fn 적용할 함수 * @param string $value 적용할 값 * @return Array $array 적용완료시킨 배열 */ function array_map_deep($fn, $array) { if(is_array($array)) { foreach($array as $key => $value) { if(is_array($value)) { $array[$key] = array_map_deep($fn, $value); } else { $array[$key] = call_user_func($fn, $value); } } } else { $array = call_user_func($fn, $array); } return $array; } /** * 문자열에 SQL Injection 방어 처리를 한다. * * @param String $str 적용할 String * @return String $str 적용시킨 String */ function sql_escape_string($str) { $str = preg_replace('/(and|or).*(union|select|insert|update|delete|from|where|limit|create|drop).*/i', '', $str); $str = call_user_func('addslashes', $str); return $str; } /* * 페이지네이션 만들기 */ function get_pagination($page, $total_page, $add_param) { // 만약 총 페이지가 0 이면 총 페이지는 1로 다시 설정 if ($total_page == 0) $total_page =1; // 한번에 표시할 페이지 $page_scale=5; // 최종 리턴할 문자열 생성 $str = ""; // 한번에 표시할 페이지중 가장 처음 페이지와 가장 마지막 페이지 계산 $start_page = ((ceil($page/$page_scale)-1)*$page_scale)+1; $end_page = $start_page + $page_scale-1; // 가장 마지막페이지가 총 페이지보다 크면 마지막페이지를 총 페이지로 if($end_page >= $total_page) : $end_page = $total_page; endif; // 처음 버튼 만들기 if($page > 1) : $str .= '<li><a href="?page=1">처음</a></li>'; else : $str .= '<li class="disabled"><span>처음</span></li>'; endif; // 이전 버튼 만들기 if ($start_page > 1) : $str .= '<li><a href="?page='.($start_page-1).'">이전</a></li>'; else : $str .= '<li class="disabled"><span>이전</span></li>'; endif; // 각 페이지 번호 만들기 for ($i=$start_page; $i<=$end_page; $i++) : if ($page == $i) : $str .= "<li class=\"current active\"><span>{$i}</span></li>"; else : $str .= '<li><a href="?page='.$i.'">'.$i.'</a></li>'; endif; endfor; // 다음 버튼 만들기 if ($total_page > $end_page) : $str .= '<li><a href="?page='.($end_page+1).'">다음</a></li>'; else : $str .= '<li class="disabled"><span>다음</span></li>'; endif; if ($page < $total_page) : $str .= '<li><a href="?page='.$total_page.'">마지막</a></li>'; else : $str .= '<li class="disabled"><span>마지막</span></li>'; endif; $str = "<ul class=\"pagination\">{$str}</ul>"; return $str; } /** * 시간 표시를 페이스북 처럼 */ function sns_datetime($date) { if(! is_numeric($date)) { $date = strtotime($date); } $gap = time() - $date; if($gap < 60) { $posting_time = "방금"; } elseif($gap >= 60 and $gap < 3600) { $posting_time = floor($gap/60)."분 전"; } elseif($gap >= 3600 and $gap < 86400) { $posting_time = floor($gap/3600)."시간 전"; } elseif($gap >= 86400 and $gap < 259200) { $posting_time = floor($gap/86400)."일 전"; } else { $posting_time = date("Y.m.d", $date); } return $posting_time; }
[catlist id=76 numberposts=14 conditional_title=”PHP 질문과 답변 게시판 만들기” orderby=date]