Я использую var_dump(@$_FILES['file']['type'])
чтобы проверить тип файла, который я загрузил
Во-первых, я загрузил exe file
под названием « uninstall.exe
», и он вернулся
"string 'application/octet-stream' (length=24)"
Затем я переименовал этот файл в uninstall.png
, он вернулся
string 'image/png' (length=9)
Мой вывод: $ _FILES ['file'] ['type'] проверяет только расширение файла, а не тип исходного файла.
Следующий код из w3cschool :
$allowedExts = array("gif", "jpeg", "jpg", "png"); $extension = end(explode(".", $_FILES["file"]["name"])); if ((($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/png")) && ($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts))
Я думаю, что $_FILES["file"]["type"]
в вышеуказанных кодах не является необходимым, мы можем просто проверить расширение файла с помощью explode()
и in_array
Я просто начинающий php, может кто-то подтвердить мою идею? Благодаря!
Вы абсолютно правы. Тип MIME предоставляется клиентом, и вы не можете гарантировать его правильность. В этом отношении, так же как и расширение файла. Если вам нужно быть абсолютно уверенным, вам нужно посмотреть содержимое файла.
Если вы хотите быть уверенным, что изображение было загружено, используйте getimagesize , который возвращает 0 для не-изображений.
Вы должны использовать оболочку расширений GD или Imagick. Очень хороший – WideImage .