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"