mime_content_type
funkcja
Wykrywa typ MIME pliku na podstawie jego zawartości (magic bytes) za pomocą rozszerzenia fileinfo.
mime_content_type(string $filename): string|false
mime_content_type analizuje zawartość pliku (tzw. magic bytes), a nie samo rozszerzenie, i zwraca typ MIME — np. 'image/png' lub 'text/plain'. Używa wewnętrznie rozszerzenia fileinfo. Zwraca false przy błędzie.
Funkcja jest przydatna przy walidacji przesłanych plików — rozszerzenie może być podmienione przez użytkownika, natomiast sygnatura binarna jest trudniejsza do sfałszowania. Mimo to nie traktuj jej jako jedynej warstwy zabezpieczeń.
Bezpieczeństwo: nie przekazuj danych od użytkownika bezpośrednio jako $filename.
<?php
declare(strict_types=1);
$dozwoloneMime = ['image/jpeg', 'image/png', 'image/webp'];
$sciezka = $_FILES['zdjecie']['tmp_name'] ?? '';
if ($sciezka === '') {
exit('Brak pliku.');
}
$mime = mime_content_type($sciezka);
if ($mime === false || !in_array($mime, $dozwoloneMime, true)) {
http_response_code(415);
exit('Niedozwolony typ pliku: ' . htmlspecialchars((string) $mime));
}
echo 'Typ MIME: ' . $mime . PHP_EOL;
// np. "Typ MIME: image/jpeg"