Signatur
Beschreibung
exif_imagetype() liest die ersten Bytes einer Bilddatei und ermittelt daraus den Bildtyp. Die Funktion arbeitet dabei ausschließlich auf Basis der tatsächlichen Datei-Signatur (Magic Bytes), nicht anhand der Dateiendung. Das Ergebnis ist eine der vordefinierten IMAGETYPE_*-Konstanten, z. B. IMAGETYPE_JPEG, IMAGETYPE_PNG oder IMAGETYPE_GIF.
Die Funktion ist besonders nützlich, um hochgeladene Dateien serverseitig zu validieren, bevor sie weiterverarbeitet werden. Im Vergleich zu getimagesize() ist sie deutlich schneller, da sie nicht die vollständigen Bild-Metadaten einliest, sondern nur die ersten wenigen Bytes analysiert.
Der zurückgegebene Integer-Wert kann direkt mit den IMAGETYPE_*-Konstanten verglichen werden. Ergänzend lässt sich mit image_type_to_mime_type() der zugehörige MIME-Typ und mit image_type_to_extension() die passende Dateiendung ermitteln.
Wird kein gültiger Bildtyp erkannt oder die Datei kann nicht geöffnet werden, gibt die Funktion false zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur zu prüfenden Bilddatei (lokal oder als URL, sofern URL-Wrapper aktiviert sind). |
Rückgabewert
IMAGETYPE_*-Konstanten (z. B. IMAGETYPE_JPEG = 2) zurück. Wird kein gültiger Bildtyp erkannt oder die Datei kann nicht geöffnet werden, wird false zurückgegeben.Beispiele
Bildtyp einer lokalen Datei prüfen
<?php
$file = '/var/www/uploads/foto.jpg';
$type = exif_imagetype($file);
if ($type === false) {
echo 'Kein gültiges Bild oder Datei nicht lesbar.';
} else {
echo 'Bildtyp-Konstante: ' . $type . PHP_EOL;
echo 'MIME-Typ: ' . image_type_to_mime_type($type) . PHP_EOL;
echo 'Erweiterung: ' . image_type_to_extension($type) . PHP_EOL;
}
Sicherer Datei-Upload mit Bildtyp-Validierung
<?php
$allowedTypes = [
IMAGETYPE_JPEG,
IMAGETYPE_PNG,
IMAGETYPE_GIF,
IMAGETYPE_WEBP,
];
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['bild'])) {
$tmpPath = $_FILES['bild']['tmp_name'];
$detectedType = exif_imagetype($tmpPath);
if ($detectedType === false || !in_array($detectedType, $allowedTypes, true)) {
http_response_code(415);
echo 'Ungültiger oder nicht unterstützter Bildtyp. Erlaubt: JPEG, PNG, GIF, WebP.';
exit;
}
$extension = image_type_to_extension($detectedType, false); // ohne führenden Punkt
$zielDatei = '/var/www/uploads/' . bin2hex(random_bytes(8)) . '.' . $extension;
if (move_uploaded_file($tmpPath, $zielDatei)) {
echo 'Bild erfolgreich gespeichert: ' . basename($zielDatei);
} else {
echo 'Fehler beim Speichern der Datei.';
}
}
// Wichtig · Fallstricke
Sicherheitshinweis: Verlasse dich beim Validieren hochgeladener Dateien niemals allein auf den MIME-Typ aus $_FILES['bild']['type'], da dieser vom Client manipuliert werden kann. exif_imagetype() prüft die tatsächliche Datei-Signatur und ist daher deutlich zuverlässiger.
Performance: Für eine reine Typ-Erkennung ist exif_imagetype() vorzuziehen gegenüber getimagesize(), da letztere die gesamte Datei analysiert und deutlich mehr Ressourcen benötigt.
Erweiterung: Die Funktion gehört zur EXIF-Erweiterung. Stelle sicher, dass diese in deiner PHP-Installation aktiviert ist (extension=exif in der php.ini). Ab PHP 7.2 ist die Erweiterung standardmäßig aktiviert, muss aber dennoch explizit eingeschaltet werden.
Einschränkungen: Nicht alle Bildformate werden unterstützt. Exotische Formate wie AVIF werden erst ab bestimmten PHP-Versionen oder Erweiterungen erkannt. Für komplexe Formatanalysen empfiehlt sich der Einsatz der GD- oder Imagick-Bibliothek.