PHP Sprawdzanie poprawności przesłanego pliku [duplikat]

To pytanie ma już odpowiedź tutaj:

Jak sprawdzić, czy przesłany plik jest obrazem bez typu MIME? 7 odpowiedzi

Jestem początkującym w PHP i obecnie uczę się części „Sprawdzanie poprawności przesyłania pliku”.

Zrobiłem stronę test.php zawierającą następujący kod:

var_dump(@$_FILES['file']['type']);

Po pierwsze, przesłałem obraz „img.gif” i zwrócił:

string 'image/gif' (length=9)

Następnie zmieniłem rozszerzenie obrazu na „.jpg” i wróciło:

string 'image/jpeg' (length=10)

Więc zdałem sobie sprawę, że $ _FILES [„plik”] [„typ”] zwraca tylko przesłane rozszerzenie pliku, ale tak naprawdę nie sprawdziłem, jaki to plik.

Na tej stronie,http: //www.w3schools.com/php/php_file_upload.as, jest kod:

$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))

Zastanawiam się, dlaczego powyższe kody dwukrotnie sprawdzają rozszerzenie pliku? Usunąłem niektóre z powyższych kodów i to jest mój nowy kod:

$allowedExts = array("gif", "jpeg", "jpg", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if (($_FILES["file"]["size"] < 20000) && in_array($extension, $allowedExts))

Czy mój kod jest poprawny? Czy masz jakieś lepsze sposoby na sprawdzenie poprawności przesłanego pliku to obraz?

Dzięki

questionAnswers(3)

yourAnswerToTheQuestion