CODE CAVE

[PHP] 파일 형식 체크 함수 본문

Web/Back-End

[PHP] 파일 형식 체크 함수

코드케이브 2016. 6. 8. 01:12

파일 형식 체크 함수 (이미지, 그 외)


function file_chk($file, $type = ""){

$file_ext = explode(".", strrev($file));
$file_ext = strrev($file_ext[0]);

if(!$type or $type == "Gallery"){

//타입이 갤러리일 경우
$img_ok = array("gif", "png", "jpg", "jpeg", "bmp", "GIF", "PNG", "JPG", "JPEG", "BMP");
if(!in_array($file_ext, $img_ok)) page_move("이미지 파일만 업로드 가능합니다.", false);

} else {

//갤러리 외의 타입은 웹 코드 파일을 막는다.
$img_no = array("html", "htm", "php", "js", "jsp", "asp", "HTML", "HTM", "PHP", "JS", "JSP", "ASP");
if(in_array($file_ext, $img_no)) page_move("업로드 할 수 없는 파일 형식입니다.", false);

}

return $file_ext;
}


파일을 업로드 할 때 갤러리의 경우는 이미지만 올라가야하고, 그 외 파일 첨부는 보안에 위험이 될 수 있는 파일들은 업로드가 되면 안될 것 입니다. 


그래서 만들어 봤습니다.


페이지 타입($type)에 따라 파일의 확장자 검사를 다르게 하고, 페이지 이동을 하는 함수입니다.


위 함수는 이럴 때 사용할 수 있는 단순하면서 할 기능은 다 합니다.


file_chk(파일이름, 페이지의타입)


위 함수는 단순히 확장자 검사만 할 뿐인데요~


실제로 정말 까다롭게 파일을 검사하는 큰 기업 같은 경우는 파일의 내부까지 검사하여 파일 타입을 제대로 체크하여 확장자를 속이는 간단한 훼이크로는 업로드할 수 없게 되있더라구요,


나중에 이렇게 강력한 파일 검사 기능을 개발하게 된다면 또 포스팅 해보겠습니다 ㅎㅎ (그런 날이 오길..)




추가적으로 위의 file_chk()에서 쓴 page_move 함수는 나름 꾀 유용합니다. 보통은 페이지이동 유형별로 함수를 나눠놓는데, 저는 하나의 함수가 매개변수에 따라 다수의 역할을 할 수 있게 해봤습니다.


function page_move($msg, $url){
if(!$msg) {
if(!$url) {
echo "<script>history.back();</script>";
} else {
echo "<script>location.href='".$url."'</script>";
}
} else {
if(!$url) {
echo "<script>alert(\"$msg\"); history.back();</script>";
} else {
echo "<script>alert(\"$msg\"); location.href='".$url."'</script>";
}
}
}



이 함수로 사용하는 페이지 이동 유형은4가지 입니다.


1. page_move(false, false); : 메시지 출력 없이 페이지 뒤로

 : 그냥 무작정 한페이지 뒤로 가게 만듭니다.


2. page_move(false, "url"); : 메시지 출력 없이 페이지 "url" 로

 : 보통 로그인이 완료될 때 "로긴이 완료되었습니다!" 라는 alert 이 뜨고 이동되지는 않죠? 이럴때 씁니다.


3. page_move("message", false); : 메시지 출력 후 페이지 뒤로

 : 뭔가 에러가 있을때 이 에러를 팝업으로 알려주고 뒤로 가지게 됩니다. 팝업메세지 -> 뒤로


4. page_move("message", "url"); : 메시지 출력 후 페이지 "url" 로

 : 회원가입 같은 경우는 회원가입 축하 메시지가 나오고 이동되는 경우가 많죠 ㅎㅎ 이렇게 팝업메시지 -> 특정페이지 에 씁니다.


비슷한 기능을 하는 괜찮은 함수 작성한거 있으시면 같이 댓글로 공유해주세요!! ㅎㅎ






도움이 되셨다면 아래 하트를 뿅..