본문 바로가기

php/코드이그나이터(CI3)

파일업로드

반응형
//확장자 추출
function get_ext($value) {
    $array = explode('.', $value);
    return strtolower(array_pop($array));
}
    
function file_upload($datapath,$subpath,$f_admin_id,$FILES){
    $tmp_name = $FILES['name'];
    $tmp_file = $FILES['tmp_name'];
    $arr_invalid_ext = array('exe', 'sh', 'bat', 'jar', 'py', 'java','php');

    $arr_ok_filepath = array();
    $arr_ok_filename = array();
    if(empty($tmp_file)){
        return json_encode(array("result"=>"error_not_files"));
    }

    if (!is_array($tmp_name) || !is_array($tmp_file)) {

        $extension = @$this->get_ext($tmp_name);

        if(in_array($extension, $arr_invalid_ext)){
            return json_encode(array("result"=>"유효하지 않은 파일이 있습니다. 다시 시도해 주세요.(ext_err)"));
        }

        if($subpath==""){
            $default_path = sprintf("%s/%s", $datapath,"tmp");
        }else{
            $default_path = sprintf("%s/%s", $datapath,$subpath);
        }

        if (!is_dir($default_path))
            mkdir($default_path);

        $member_path = sprintf("%s/%s", $default_path,$f_admin_id);
        if (!is_dir($member_path))
            mkdir($member_path);

        if($subpath != "tmp" && $subpath !=""){
            $yyyy = sprintf("%s/%s", $member_path, date("Y"));
            $mm = sprintf("%s/%s", $yyyy, date("m"));

            if (!is_dir($yyyy))
                mkdir($yyyy);

            if (!is_dir($mm))
                mkdir($mm);
        }

        if($subpath != "tmp" && $subpath !=""){
            $new_file = @sprintf("%s/%s%s.%s", $mm, date("Ymd"), md5(uniqid(rand())), $extension);
        }else{
            $new_file = @sprintf("%s/%s", $member_path, $tmp_name);
        }

        if (!@move_uploaded_file($tmp_file, $new_file)) {
            return json_encode(array("result"=>"error_upload"));
        } else {
            array_push($arr_ok_filepath,$new_file);
            array_push($arr_ok_filename,$tmp_name);
        }

    } else {
        for($i=0; $i<count($tmp_file); $i++){
            $extension = @$this->get_ext($tmp_name[$i]);

            if(in_array($extension, $arr_invalid_ext)){
                return json_encode(array("result"=>"유효하지 않은 파일이 있습니다. 다시 시도해 주세요.(ext_err)"));
            }

            if($subpath==""){
                $default_path = sprintf("%s/%s", $datapath,"tmp");
            }else{
                $default_path = sprintf("%s/%s", $datapath,$subpath);
            }

            if (!is_dir($default_path))
                mkdir($default_path);

            $member_path = sprintf("%s/%s", $default_path,$f_admin_id);
            if (!is_dir($member_path))
                mkdir($member_path);

            if($subpath != "tmp" && $subpath !=""){
                $yyyy = sprintf("%s/%s", $member_path, date("Y"));
                $mm = sprintf("%s/%s", $yyyy, date("m"));

                if (!is_dir($yyyy))
                    mkdir($yyyy);

                if (!is_dir($mm))
                    mkdir($mm);
            }

            if($subpath != "tmp" && $subpath !=""){
                $new_file = @sprintf("%s/%s%s.%s", $mm, date("Ymd"), md5(uniqid(rand())), $extension);
            }else{
                $new_file = @sprintf("%s/%s", $member_path, $tmp_name[$i]);
            }

            if (!@move_uploaded_file($tmp_file[$i] , $new_file)) {
                return json_encode(array("result"=>"error_upload"));
            } else {
                array_push($arr_ok_filepath,$new_file);
                array_push($arr_ok_filename,$tmp_name[$i]);
            }
        }
    }

    return json_encode( array(
        "result"=>"ok",
        "filename"=>$arr_ok_filename,
        "filepath"=>$arr_ok_filepath
    ));

}

 

라이브러리 형태에 만들어둔 파일 업로드 함수이다.

$datapath 는 기본 data가 저장되는 폴더 경로

$subpath 는 그 밑 하위 분류

$admin_id 는 저장하는 사람별로 나누기 위해
$FILE 은 파일 오브젝트 

 

파일을 array나 단일 파일 형태로 받아

년, 월 별로 폴더를 만들어 저장하는 방식이다

 

컨트롤러에서 아래와 같이 호출했다.

//파일 업로드
function file_upload($subpath){

    $result = $this->lib->file_upload($this->config->item('data_path'),$subpath,"test",$_FILES['file']);

    echo $result;
}

 

그리고 업로드를 사용 할 때 업로드하는 폴더 권한을 반드시 바꿔주자.

안그러면 계속 오류 날 것이다

반응형

'php > 코드이그나이터(CI3)' 카테고리의 다른 글

php 암호화  (0) 2024.05.12
파일다운로드  (0) 2024.05.12
php exec 실행안될때 확인  (0) 2024.05.12
코드이그나이터3, 세션생성오류  (0) 2024.04.18
php sftp로 폴더 업로드  (2) 2024.04.18