반응형
//확장자 추출
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 |