2011-09-05 13 views
7

Czy mogę przesyłać zdjęcia do typu pliku z numeru $_FILES? Czy muszę ponownie sprawdzić przy pomocy exif_imagetype()?

Odpowiedz

6

Z documentation:

typ mime pliku, jeśli przeglądarka nie dostarczyło tych informacji. Przykładem może być "image/gif". Ten typ MIME nie jest jednak sprawdzany po stronie PHP i dlatego nie przyjmuje jego wartości za pewnik.

+0

idealne, dzięki – HappyDeveloper

3

Zawsze używam następną funkcję, aby sprawdzić prawidłowe obrazy:

function Check_Image($Filename) { 
    if ($Check_Image = @getimagesize($Filename)) { 
     return TRUE; 
    } 
    return FALSE; 
} 
5

Nigdy nie ufaj wszystko, co przychodzi z zewnątrz, szczególnie przesyłanie plików!

Sprawdź rozmiar, lokalizację, mime/typ, rozszerzenie i wszystko, co możesz sprawdzić!

+0

Ale czy ten typ pochodzi z zewnątrz? Czy jest to coś dodane przez php? – HappyDeveloper

+2

Przeglądarka zapewnia to, nie ufaj temu. –

+0

@Wesley van Opdorp się zgodził, sprawdź też * zawartość *, jeśli możesz. – Cheekysoft

2

Nie, nie można ufać temu, ponieważ this information is provided by the client browser.

$_FILES['userfile']['type'] typ mime pliku, jeśli przeglądarka przekazała te informacje. Przykładem może być "image/gif". Ten typ mime nie jest jednak sprawdzany po stronie PHP i dlatego nie przyjmuje wartości .

4

Nie można nie ufać zmiennej $_FILES['userfile']['type']. Wartość obecna w tej zmiennej może być podrobiona. Można użyć finfo_file wykryć typ pliku bardziej wiarygodny:

$finfo = finfo_open(FILEINFO_MIME_TYPE); // we need mime type 
echo finfo_file($finfo, "/path/to/uploaded/file"); // displays something like image/gif 
finfo_close($finfo); 

Funkcje te wymagają PHP> = 5.3.0.

Powiązane problemy