
임시 위치에 있는 파일을 이동하기 전에 다음을 수행해야 한다.
앰퍼샌드, 콜론, 마침표, 그리고 공백과 같은 문자는 문제를 일으킬 수 있기 때문에 파일명에서 제거되어야 한다. 이를 위해 A-Z, a-z, 그리고 0-9 이외의 문자를 대시dash로 바꿀 수 있다.
$basename = pathinfo($filename, PATHINFO_FILENAME); $extension = pathinfo($filename, PATHINFO_EXTENSION);
$basename = preg_replace('/[^A-z0-9]/'. '-', $basename);
$filepath = 'uploads/' . $basename . '.' . $extensions;
$i = 1; while (file_exists('uploads/' . $filename)) { $i = $i + 1; $filename = $basename . $i . '.' . $extension;
사이트에서 업로드된 파일을 가지고 작업할 수 있도록 하려면, 업로드된 파일을 다른 위치로 옮기기 전에 다음을 확인한다.
php.ini 또는 .htaccess에서 최대 파일 업로드 크기를 설정하거나, 업로드를 허용하는 파일의 크기를 제한하는 유효성 검증 코드를 페이지에 생성할 수 있다.
파일이 php.ini 또는 .htaccess에 설정된 최대 업로드 크기보다 더 큰지 확인하려면 $_FILES 배열을 살펴본다. 이러한 파일에 대한 error 키는 1의 값을 갖는다.
$_FILES 배열에서 파일의 크기도 확인할 수 있다. size 키는 해당 파일의 크기를 바이트 단위의 값으로 갖는다. 다음의 삼항 연산자 두 개는 이러한 검사를 수행한다.
$error = ($_FILES['image']['error'] === 1) ? 'Too large' : ''; $error = ($_FILES['image']['size'] <= 5242880) ? '' : 'Too large';
파일의 미디어 타입과 파일 확장자를 확인하는 것은 사이트가 파일을 안전하게 처리할 수 있게 해준다.
$allowed_types = ['image/jpeg', 'image/png', 'image/gif',]; $type = mime_content_type($_FILES['image']['tmp_name']); $error = in_array($type, $allowed_types) ? '' : 'Wrong file type'; $allowed_exts = ['jpeg', 'jpg', 'png', 'gif',]; $filename = strtolower($_FILES['image']['name']); $ext = pathinfo($filename, PATHINFO_EXTENSION)); $error .= in_array($ext, $allowed_exts) ? '' : 'Wrong extension ';
출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022
감사합니다. 이런 정보를 나눠주셔서 좋아요.