class EditorImage 추가

This commit is contained in:
kagla
2021-06-26 08:20:09 +09:00
parent b3b92d4e1c
commit d8df299366

View File

@ -1,4 +1,6 @@
<?php
include_once("../../../common.php");
function print_error($type, $msg) {
if(strtolower($type) == "json") {
$res = array();
@ -11,7 +13,264 @@ function print_error($type, $msg) {
exit;
}
include_once("../../../common.php");
class EditorImage
{
protected $isUse = false;
protected $tblName = ""; // 테이블명
protected $delDay = 1; // 삭제 대기 일수
function __construct() {
if(USE_EDITOR_IMAGE) $this->isUse = true;
global $g5;
$this->tblName = !empty($g5['editor_image_table']) ? $g5['editor_image_table'] : G5_TABLE_PREFIX.'editor_image';
$this->make_table();
}
// 테이블 생성
function make_table() {
/*
$sql_chk = "select * from information_schema.tables where table_name = '{$this->tblName}'";
$res_chk = sql_query($sql_chk);
if(sql_num_rows($res_chk) < 1) {
$sql = "
CREATE TABLE `{$this->tblName}` (
`ei_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '고유값',
`ei_gubun` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '사용구분',
`ei_gubun_id` INT(20) NOT NULL DEFAULT 0 COMMENT '사용구분번호',
`mb_id` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '회원아이디',
`ei_name_original` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '원본파일명',
`ei_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '업로드 파일명',
`ei_path` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '업로드 경로',
`ei_ext` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '파일확장자',
`ei_size` INT(11) NOT NULL DEFAULT 0 COMMENT '파일용량',
`ei_width` INT(11) NOT NULL DEFAULT 0 COMMENT '이미지 너비',
`ei_height` INT(11) NOT NULL DEFAULT 0 COMMENT '이미지 높이',
`ei_ip` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '업로드 ip',
`ei_datetime` DATETIME NOT NULL COMMENT '업로드 일시',
PRIMARY KEY (`ei_id`),
INDEX `mb_id` (`mb_id` ASC),
INDEX `select` (`ei_gubun` ASC, `ei_gubun_id` ASC),
INDEX `ip` (`ei_ip` ASC))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8
COMMENT = '에디터 업로드 이미지 관리';
";
sql_query($sql);
}
*/
$arr = array();
$res = sql_query("desc g5_editor_image");
while($row = sql_fetch_array($res)) {
$arr[] = $row['Field'];
}
$alter = array();
if(!in_array("ei_gubun_sub", $arr)) {
$alter[] = " ADD COLUMN `ei_gubun_sub` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '사용구분-에디터ID' AFTER `ei_gubun` ";
}
if(!in_array("ei_gubun_path", $arr)) {
$alter[] = " CHANGE COLUMN `ei_gubun` `ei_gubun` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '사용구분-폼이름' ";
$alter[] = " ADD COLUMN `ei_gubun_path` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '사용구분-업로드경로' AFTER `ei_gubun_sub` ";
}
if(in_array("ei_gubun_id", $arr)) {
$alter[] = " drop column `ei_gubun_id` ";
}
if(in_array("ei_token", $arr)) {
$alter[] = " drop column `ei_token` ";
}
if(count($alter) > 0) {
$sql = " ALTER TABLE `g5_editor_image` ".implode(",", $alter);
sql_query($sql);
}
}
// 이미지 경로 출력
function img_url($path) {
$_path = preg_replace('/^\/.*\/'.G5_DATA_DIR.'/', '/'.G5_DATA_DIR, $path);
$_url = G5_URL.$_path;
return $_url;
}
// 업로드 썸네일 생성
function img_thumbnail($srcfile, $thumb_width=0, $thumb_height=0, $path=0) {
$is_animated = false; // animated GIF 체크
if(is_file($srcfile)) {
$filename = basename($srcfile);
$filepath = dirname($srcfile);
$size = @getimagesize($srcfile);
if(function_exists('exif_read_data')) {
// exif 정보를 기준으로 회전각도 구함
$exif = @exif_read_data($srcfile);
$degree = 0;
if(!empty($exif['Orientation'])) {
switch($exif['Orientation']) {
case 8:
$degree = 90;
break;
case 3:
$degree = 180;
break;
case 6:
$degree = -90;
break;
}
// 회전각도를 구한다.
if($degree) {
// 세로사진의 경우 가로, 세로 값 바꿈
if($degree == 90 || $degree == -90) {
$tmp = $size;
$size[0] = $tmp[1];
$size[1] = $tmp[0];
}
}
}
}
$width = $size[0]; // 너비
$height = $size[1]; // 높이
$fType = $size[2]; // 파일 종류
// 원본 크기가 지정한 크기보다 크면 썸네일 생성진행
if($width > $thumb_width || ($thumb_height > 0 && $height > $thumb_height)) {
#echo $width.PHP_EOL;
#echo $thumb_width.PHP_EOL;
#echo $height.PHP_EOL;
#echo $thumb_height.PHP_EOL;
// 원본비율에 맞게 너비/높이 계산
$temp_width = $thumb_width;
$temp_height = round(($temp_width * $height) / $width);
// 계산된 높이가 지정된 높이보다 높을경우
if($thumb_height > 0 && $thumb_height < $temp_height) {
$temp_height = $thumb_height;
$temp_width = round(($temp_height * $width) / $height);
}
// 썸네일 생성
if($fType == 1 && is_animated_gif($srcfile)) { // animated GIF 인 경우
$is_animated = true;
$thumb_filename = preg_replace("/\.[^\.]+$/i", "", $filename);
$thumb_filename = "thumb-{$thumb_filename}_{$temp_width}x{$temp_height}.gif";
// 썸네일이 없으면 생성시작
if(!is_file($filepath."/".$thumb_filename)) {
$ani_src = @ImageCreateFromGif($srcfile);
$ani_img = @imagecreatetruecolor($temp_width, $temp_height);
@ImageColorAllocate($ani_img, 255, 255, 255);
@ImageCopyResampled($ani_img, $ani_src, 0, 0, 0, 0, $temp_width, $temp_height, ImageSX($ani_src),ImageSY($ani_src));
@ImageInterlace($ani_img);
@ImageGif($ani_img, $filepath."/".$thumb_filename);
}
} else { // 일반 이미지
$thumb_filename = thumbnail($filename, $filepath, $filepath, $temp_width, $temp_height, false);
}
}
// 처리된 내용이 없으면 기존 파일 사용
if(empty($thumb_filename)) {
$thumb_filename = $filename;
}
switch($path) {
case 1 :
$thumb_file = $filepath."/".$thumb_filename;
$thumb_file = str_replace(G5_DATA_PATH, G5_DATA_URL, $thumb_file);
break;
default:
$thumb_file = $thumb_filename;
break;
}
}
$res = array();
$res['src'] = $thumb_file;
$res['animated'] = $is_animated;
return $res;
}
// 이미지 삭제
function img_del($arr) {
if(count($arr) < 1) return;
// 선택된 번호들 나열
$del_ei_id = implode("', '", $arr);
// 파일별 경로 조회
$sql_chk = "select ei_id, ei_path ";
$sql_chk .= " from {$this->tblName} ";
$sql_chk .= " where ei_id in ('{$del_ei_id}')";
$res_chk = sql_query($sql_chk);
$del_arr = array();
while($row = sql_fetch_array($res_chk)) {
$path = $row['ei_path'];
// 조회된 경로의 파일 삭제진행
unlink($path);
// 썸네일 삭제
$filename = preg_replace("/\.[^\.]+$/i", "", basename($path));
$filepath = dirname($path);
$files = glob($filepath.'/thumb-'.$filename.'*');
if (is_array($files)) {
foreach($files as $filename) unlink($filename);
}
$del_arr[] = $row['ei_id'];
}
// 파일이 삭제가 되면 DB내용 삭제
$sql_del = "delete ";
$sql_del .= " from {$this->tblName} ";
$sql_del .= " where ei_id in ('".implode("','", $del_arr)."')";
sql_query($sql_del);
}
// 업로드 이미지 테이블 저장
function insert_data($file, $upload, $gubun, $gubun_sub, $gubun_path) {
if(!$this->isUse) return;
global $member;
$mb_id = $member['mb_id'];
$oname = $file['name'];
$fsize = $file['size'];
$ip = $_SERVER['REMOTE_ADDR'];
$ftmp = explode(".", $oname);
$fext = $ftmp[count($ftmp)-1];
$fpath = $upload;
$utmp = getimagesize($upload);
$width = $utmp[0];
$height = $utmp[1];
$uftmp = explode("/", $upload);
$fname = $uftmp[count($uftmp)-1];
$sql = "
insert into {$this->tblName} set
ei_gubun = '{$gubun}',
ei_gubun_sub = '{$gubun_sub}',
ei_gubun_path = '{$gubun_path}',
mb_id = '{$mb_id}',
ei_name_original = '{$oname}',
ei_name = '{$fname}',
ei_path = '{$fpath}',
ei_ext = '{$fext}',
ei_size = '{$fsize}',
ei_width = '{$width}',
ei_height = '{$height}',
ei_ip = '{$ip}',
ei_datetime = now()
";
$res = sql_query($sql);
return $res;
}
}
// 업로드 경로 세팅
$ym = date('ym', G5_SERVER_TIME);