PHP: $FILES["файл"]["тип"] бесполезен [закрыт]
Я использую var_dump(@$_FILES['file']['type'])
для проверки типа файла, который я загрузил
Сначала я загрузил exe file
с именем "uninstall.exe
", и он вернул
"string 'application/octet-stream' (length=24)"
Затем я переименовал этот файл в uninstall.png
, он вернул
string 'image/png' (length=9)
Мой вывод таков: $_FILES['файл']['тип'] проверяет только расширение файла, а не исходный тип файла.
Следующий код взят из 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, может кто-нибудь подтвердить мою идею? Спасибо!
3 answers
Вы абсолютно правы. Тип MIME предоставляется клиентом, и вы не можете гарантировать, что он правильный. Если уж на то пошло, то и расширение файла тоже. Если вам нужно быть полностью уверенным, вам нужно взглянуть на содержимое файла.
Если вы хотите быть уверены, что изображение было загружено, используйте getimagesize, который возвращает 0 для не изображений.
Вы должны использовать оболочку расширений GD или Imagick. Очень хорошим является Широкое изображение.