본문 바로가기
웹 개발 이야기/php

[PHP] 파일 저장(확장자 체크, thumnail, 기존 파일 삭제)

by Gommin 2023. 5. 25.

lib_inc.php

function thumnail($file, $save_filename, $save_path, $max_width, $max_height)
{
    $img_info = getimagesize($file);
    if ($img_info[2] == 1) {
        $src_img = ImageCreateFromGif($file);
    } elseif ($img_info[2] == 2) {
        $src_img = ImageCreateFromJPEG($file);
    } elseif ($img_info[2] == 3) {
        $src_img = ImageCreateFromPNG($file);
    } else {
        return 0;
    }
    $img_width = $img_info[0];
    $img_height = $img_info[1];

    if ($img_width > $max_width || $img_height > $max_height) {
        if ($img_width == $img_height) {
            $dst_width = $max_width;
            $dst_height = $max_height;
        } elseif ($img_width > $img_height) {
            $dst_width = $max_width;
            $dst_height = ceil(($max_width / $img_width) * $img_height);
        } else {
            $dst_height = $max_height;
            $dst_width = ceil(($max_height / $img_height) * $img_width);
        }
    } else {
        $dst_width = $img_width;
        $dst_height = $img_height;
    }
    if ($dst_width < $max_width) $srcx = ceil(($max_width - $dst_width) / 2); else $srcx = 0;
    if ($dst_height < $max_height) $srcy = ceil(($max_height - $dst_height) / 2); else $srcy = 0;

    if ($img_info[2] == 1) {
        $dst_img = imagecreate($max_width, $max_height);
    } else {
        $dst_img = imagecreatetruecolor($max_width, $max_height);
    }

    $bgc = ImageColorAllocate($dst_img, 255, 255, 255);
    ImageFilledRectangle($dst_img, 0, 0, $max_width, $max_height, $bgc);
    ImageCopyResampled($dst_img, $src_img, $srcx, $srcy, 0, 0, $dst_width, $dst_height, ImageSX($src_img), ImageSY($src_img));

    if ($img_info[2] == 1) {
        ImageInterlace($dst_img);
        ImageGif($dst_img, $save_path . $save_filename);
    } elseif ($img_info[2] == 2) {
        ImageInterlace($dst_img);
        ImageJPEG($dst_img, $save_path . $save_filename);
    } elseif ($img_info[2] == 3) {
        ImagePNG($dst_img, $save_path . $save_filename);
    }
    @ImageDestroy($dst_img);
    @ImageDestroy($src_img);
}
function thumnail_width($file, $save_filename, $save_path, $max_width)
{
    $img_info = getimagesize($file);
    if ($img_info[2] == 1) {
        $src_img = ImageCreateFromGif($file);
    } else if ($img_info[2] == 2) {
        $src_img = ImageCreateFromJPEG($file);
    } else if ($img_info[2] == 3) {
        $src_img = ImageCreateFromPNG($file);
    } else {
        return 0;
    }

    $img_width = $img_info[0];
    $img_height = $img_info[1];

    $dst_width = $max_width;
    $dst_height = round($dst_width * ($img_height / $img_width));

    $srcx = 0;
    $srcy = 0;

    if ($img_info[2] == 1) {
        $dst_img = imagecreate($dst_width, $dst_height);
    } else {
        $dst_img = imagecreatetruecolor($dst_width, $dst_height);
    }

    ImageCopyResampled($dst_img, $src_img, $srcx, $srcy, 0, 0, $dst_width, $dst_height, ImageSX($src_img), ImageSY($src_img));

    if ($img_info[2] == 1) {
        ImageInterlace($dst_img);
        ImageGif($dst_img, $save_path . $save_filename);
    } else if ($img_info[2] == 2) {
        ImageInterlace($dst_img);
        ImageJPEG($dst_img, $save_path . $save_filename);
    } else if ($img_info[2] == 3) {
        ImagePNG($dst_img, $save_path . $save_filename);
    }
    @ImageDestroy($dst_img);
    @ImageDestroy($src_img);
}

 

banner_update.php
// 확장자 체크, 기존 파일 삭제 기능 포함
// sql 구문은 자신의 작업 환경에 맞춰서 수정해야 함

include "./lib_inc.php";

$upload_directory = './data/banner/';
$ext_str = "jpg,jpeg,gif,png,JPG,JPEG,GIF,PNG";
$allowed_extensions = explode(',', $ext_str);
$idx = $_POST['idx'];
$a_file = '';

$ext = substr($_FILES['a_file'], strrpos($_FILES['a_file']['name'], '.') + 1);
$file_name = "banner".date("YmdHis").'.'.$ext;
if(!in_array($ext, $allowed_extensions)) {
    // 확장자 검사
    alert("업로드할 수 없는 확장자 입니다.","./adbanner_list.php?".$_POST['qstr']);
}
if(move_uploaded_file($_FILES['a_file']['tmp_name'], $upload_directory.$file_name)) {
    // 이미지 파일 저장 후,
    $tmpFilePath = $_FILES['a_file']['tmp_name'];
    if (getimagesize($tmpFilePath)){
        // 이미지 width, height 값 확인
        $imageInfo = getimagesize($tmpFilePath);
        $width = $imageInfo[0];
        $height = $imageInfo[1];
        // 이미지 용량 줄이기
        thumnail($upload_directory."/".$file_name, $file_name, $upload_directory."/", $width, $height);
        $a_file = $file_name;
    }
} else {
    alert("파일이 업로드 되지 않았습니다.","./adbanner_list.php?".$_POST['qstr']);
}

if($a_file){
    // 새로운 파일이 첨부되었을 때
    $sqla = "select * from {DB_TABLE} where idx = '{$idx}' ";
    $rowa = $DB->sql_fetch($sqla);
    if($rowa['a_file']){
        // 기존에 저장되어 있는 파일이 있을 경우 파일 삭제
        unlink($upload_directory.$rowa['a_file']);
    }
}

댓글