gdidc/common/lib/util.inc.php
2021-10-26 18:19:06 +09:00

297 lines
9.2 KiB
PHP

<?php
//글자 자르기(utf8)
function text_cut($str, $size) {
$substr = substr( $str, 0, $size * 2 );
$multi_size = preg_match_all( '/[\\x80-\\xff]/', $substr, $multi_chars );
if ( $multi_size > 0 )
$size = $size + intval( $multi_size / 3 ) - 1;
if ( strlen( $str ) > $size )
{
$str = substr( $str, 0, $size );
$str = preg_replace( '/(([\\x80-\\xff]{3})*?)([\\x80-\\xff]{0,2})$/', '$1', $str );
$str .= '...';
}
return $str;
}
function dateDiff($strDate1, $strDate2){
$timeDiff = strtotime($strDate2) - strtotime($strDate1);
return number_format($timeDiff / 86400);
}
//캘린더 날짜 가져오기
function getDiarySet($year, $month, $day){
$diary = array();
//setlocale(LC_ALL, "ko_KR.UTF-8");
$diary[to_weekday_str] = strftime("%a", mktime(0,0,0, $month, $day, $year)); // 한글로 요일 출력.
$diary[prev_month] = date("Y-m-d",strtotime("-1 Month", mktime(0,0,0,$month,1,$year)));
$diary[this_month] = date("Y-m-d",mktime(0,0,0,$month,1,$year));
$diary[next_month] = date("Y-m-d",strtotime("+1 Month", mktime(0,0,0,$month,1,$year)));
$diary[first] = 1; // 1일.
$diary[last] = date('t', mktime(0,0,0, $month, 1, $year)); // 말일.
$diary[s_weekday] = date('w', mktime(0,0,0, $month, 1, $year)); // 1일의 요일.숫자.
$diary[e_weekday] = date('w', mktime(0,0,0, $month, $diary[last], $year)); // 말일의 요일.숫자.
$diary[first_before] = date('Y-m-d', mktime(0,0,0, $month, $diary[first] - $diary[s_weekday], $year)); // 1일 이전의 날짜.
$diary[last_after] = date('Y-m-d', mktime(0,0,0, $month, $diary[last] + (6 - $diary[e_weekday]), $year)); // 말일 이후의 날짜.
//이주시작(월) 끝(금), 다음주시작(월) 끝(금)
$todayN = date('N', mktime(0,0,0, $month, $day, $year));
$this_week_mon_time = mktime(0,0,0, $month, $day, $year) - (($todayN-1) * 24 * 3600);
$diary[last_week_fri] = date('Y-m-d',$this_week_mon_time - (3 * 24 * 3600));
$diary[this_week_sun] = date('Y-m-d',$this_week_mon_time - (24 * 3600));
$diary[this_week_mon] = date('Y-m-d',$this_week_mon_time);
$diary[this_week_wed] = date('Y-m-d',$this_week_mon_time + (3 * 24 * 3600));
$diary[this_week_fri] = date('Y-m-d',$this_week_mon_time + (4 * 24 * 3600));
$diary[next_week_sun] = date('Y-m-d',$this_week_mon_time + (6 * 24 * 3600));
$diary[next_week_mon] = date('Y-m-d',$this_week_mon_time + (7 * 24 * 3600));
$diary[next_week_wed] = date('Y-m-d',$this_week_mon_time + (10 * 24 * 3600));
$diary[next_week_fri] = date('Y-m-d',$this_week_mon_time + (11 * 24 * 3600));
// 1일 이전의 날짜 부터, 말일 이후의 날짜 까지를 배열에 넣기.
for($i=0;;$i++){
for($j=0;$j<=6;$j++){
$diary[box][$i][$j] = date('Y-m-d', strtotime($diary[first_before]) + ($i*7+$j) * 24*3600);
}
if($diary[box][$i][6]==$diary[last_after])
break;
}
return $diary;
}
/**
* Makes directory and returns BOOL(TRUE) if exists OR made.
*
* @param $path Path name
* @return bool
*/
function rmkdir($path, $mode = 0755) {
$path = rtrim(preg_replace(array("/\\\\/", "/\/{2,}/"), "/", $path), "/");
$e = explode("/", ltrim($path, "/"));
if(substr($path, 0, 1) == "/") {
$e[0] = "/".$e[0];
}
$c = count($e);
$cp = $e[0];
for($i = 1; $i < $c; $i++) {
if(!is_dir($cp) && !@mkdir($cp, $mode)) {
return false;
}
$cp .= "/".$e[$i];
}
return @mkdir($path, $mode);
}
/* 지정된 디렉토리 및의 모든 데이터 삭제*/
function rrmdir($f) {
if (is_dir($f)) {
foreach(glob($f.'/*') as $sf) {
if (is_dir($sf) && !is_link($sf)) {
rrmdir($sf);
} else {
@unlink($sf);
}
@rmdir($f);
}
}
}
//파일 바이트수 개산
function getByte($intSize){
if( strlen($intSize) < 7 ) {
$filesize = sprintf("%0.1f KB", $intSize/1024);
}else{
$filesize = sprintf("%0.1f MB", $intSize/1024000);
}
return $filesize;
}
//썸네일 만들기
function MakeThum($src, $dst, $size){
$quality = '100'; //-- jpg 퀄리티
//$size = '200'; //-- 줄일 크기 pixel (너비, 또는 높이에 적용)
//$ratio = '4:3'; //-- 이미지를 4:3 비율로 잘라냄
$ratio = 'false'; //-- 원본 이미지비율을 유지
$get_size = _getimagesize($src, $size, $ratio);
$result = resize_image($dst, $src, $get_size, $quality, $ratio);
if($result === TRUE)
return true;
else
return false;
}
// $destination : 이미지가 저장될 경로
// $departure : 원본 이미지 경로
// $size : _getimagesize() 의 return 값을 넣을 것
// $quality : JPG 퀄리티
// $ratio : 비율 강제설정
function resize_image($destination, $departure, $size, $quality='80', $ratio='false'){
if($size[2] == 1) //-- GIF
$src = imageCreateFromGIF($departure);
elseif($size[2] == 2) //-- JPG
$src = imageCreateFromJPEG($departure);
else //-- $size[2] == 3, PNG
$src = imageCreateFromPNG($departure);
$dst = imagecreatetruecolor($size['w'], $size['h']);
$dstX = 0;
$dstY = 0;
$dstW = $size['w'];
$dstH = $size['h'];
if($ratio != 'false' && $size['w']/$size['h'] <= $size[0]/$size[1]){
$srcX = ceil(($size[0]-$size[1]*($size['w']/$size['h']))/2);
$srcY = 0;
$srcW = $size[1]*($size['w']/$size['h']);
$srcH = $size[1];
}elseif($ratio != 'false'){
$srcX = 0;
$srcY = ceil(($size[1]-$size[0]*($size['h']/$size['w']))/2);
$srcW = $size[0];
$srcH = $size[0]*($size['h']/$size['w']);
}else{
$srcX = 0;
$srcY = 0;
$srcW = $size[0];
$srcH = $size[1];
}
@imagecopyresampled($dst, $src, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH);
@imagejpeg($dst, $destination, $quality);
@imagedestroy($src);
@imagedestroy($dst);
return TRUE;
}
// $img : 원본이미지
// $m : 목표크기 pixel
// $ratio : 비율 강제설정
function _getimagesize($img, $m, $ratio='false'){
$v = @getImageSize($img);
if($v === FALSE || $v[2] < 1 || $v[2] > 3)
return FALSE;
$m = intval($m);
if($m > $v[0] && $m > $v[1])
return array_merge($v, array("w"=>$v[0], "h"=>$v[1]));
if($ratio != 'false'){
$xy = explode(':',$ratio);
return array_merge($v, array("w"=>$m, "h"=>ceil($m*intval(trim($xy[1]))/intval(trim($xy[0])))));
}elseif($v[0] > $v[1]){
$t = $v[0]/$m;
$s = floor($v[1]/$t);
$m = ($m > 0) ? $m : 1;
$s = ($s > 0) ? $s : 1;
return array_merge($v, array("w"=>$m, "h"=>$s));
} else {
$t = $v[1]/intval($m);
$s = floor($v[0]/$t);
$m = ($m > 0) ? $m : 1;
$s = ($s > 0) ? $s : 1;
return array_merge($v, array("w"=>$s, "h"=>$m));
}
}
// 메일보내기
function mailing($Mail_Name,$Mail_From,$Mail_To,$Mail_Subject,$Mail_Contents){
$Mail_Header = "from:$Mail_Name<$Mail_From>\nreply-to:$Mail_Name<$Mail_From>\n";
$Mail_Header .= "Content-Type: text/html;charset=euc_kr";
mail($Mail_To,$Mail_Subject,$Mail_Contents,$Mail_Header);
} // end func
/**
* 파일 다운로드
* @param $download_file 다운로드 할 파일경로
* @param $file_org_name 다운로드 파일 이름
*/
function fileDownload($download_file, $file_org_name='') {
$copy_file_name = substr($download_file, strrpos($download_file, '/')+1);
$file_name = ($file_org_name) ? $file_org_name : $copy_file_name;
if(file_exists($download_file) == true) {
if (preg_match("(MSIE 5.5|MSIE 6.0)", $HTTP_USER_AGENT)) {
Header("Content-type:application/octet-stream");
Header("Content-Length:".filesize($download_file));
Header("Content-Disposition:attachment;filename=".$file_name."");
Header("Content-Transfer-Encoding:binary");
Header("Pragma:no-cache");
Header("Expires:0");
} else {
Header("Content-type:file/unknown");
Header("Content-Length:".filesize($download_file));
Header("Content-Disposition:attachment; filename=".$file_name."");
Header("Content-Description:PHP3 Generated Data");
Header("Pragma: no-cache");
Header("Expires: 0");
}
if (is_file($download_file)) {
$fp = fopen($download_file, "rb");
if (!fpassthru($fp)) fclose($fp);
clearstatcache();
}
} else {
jsMsg($download_file . '해당 파일이 없습니다.');
selfClose();
}
}
function makeincFiles($boardid, $limit){
if($boardid){
if(!$limit){
$limit = 5;
}
$arrList = getBoardLast($boardid, $limit);
$makeinc_path = $_SERVER["DOCUMENT_ROOT"] . "/bbs/makeinc/";
$nowfile = $makeinc_path . $boardid . ".inc.php";
$newfile = $makeinc_path . $boardid . ".inc.php.new";
if(!file_exists($nowfile)){
$fp = fopen($nowfile, 'w');
fclose($fp);
}
if(copy($nowfile, $newfile)){
$fp = fopen($newfile, 'w');
if($arrList["total"] > 0){
fwrite($fp, "<?php $makeinc_".$boardid." = ");
for($i=0; $i<$arrList["total"];$i++){
fwrite($fp, $arrList["list"][$i][idx]);
}
fwrite($fp, "?>");
}else{
fwrite($fp, "<?php $makeinc_".$boardid." = NULL;?>");
}
fclose($fp);
}
}else{
return false;
}
}
?>