24'C 구름 많음
서울 강남구
파일 업로드에서 가장 중요하게 생각되는 부분이 확장자 추출이 아닐까 싶습니다.
다음 함수로 문제시 되는 파일명(또는 확장자)를 가진 파일을 필터링하여 보다 안전하게 관리할 수 있겠습니다.
다음 문자열을 포함한 파일이라면 false 를 반환하고, ".exe. .." 과 같이 부적절한 확장자도 실행 가능한 파일로 인식하므로 정확하게 exe 파일 확장자를 추출하여 줍니다.
<?php
function cExtraction($extensions)
{
$return = false;
if(strlen($extensions) === strcspn($extensions, "\/:*?"'<>|ntrx0x0B"))
{
if(false !== strpbrk($extensions, '.'))
{
$return = strtolower(trim(substr($extensions, strcspn($extensions, '.')), '. '));
if(false !== strpbrk($return, '.'))
{
return trim(strrchr($return, '.'), '. ');
}
}
}
return $return;
}
?>
다음 예제에서 \n 을 포함한 파일명이므로 false 입니다.
<?php
$file = " f.ile. n zip.zzzz.aswqww.dwq....wqe.w..ddd.cd.d....";
if(false !== ($ext = cExtraction($file))
{
echo "'" . $ext . "'";
}
?>
다음 예제에서는 확장자 d 를 반환합니다.
<?php
$file = " f.ile. zip.zzzz.aswqww.dwq....wqe.w..ddd.cd. . d ...";
if(false !== ($ext = cType_Extraction($file))
{
echo "'" . $ext . "'"; // 출력: d
}
?>
<?php
$file = " f.ile";
if(false !== ($ext = cType_Extraction($file))
{
echo "'" . $ext . "'"; // 출력: ile
}
?>