Signatur
Beschreibung
exif_read_data() liest die EXIF-Metadaten aus einer Bilddatei (JPEG oder TIFF) und gibt alle enthaltenen Informationen — wie Kameramodell, Aufnahmedatum, GPS-Koordinaten, Belichtungszeit und Bildausrichtung — als assoziatives Array zurück. Die Funktion ist besonders nützlich bei Fotogalerien, Upload-Pipelines oder Anwendungen, die Bilder nach Aufnahmeort oder -zeit sortieren.
Über den Parameter required_sections kann die Ausgabe auf bestimmte EXIF-Sektionen eingeschränkt werden, z. B. IFD0, EXIF, GPS oder THUMBNAIL. Mit as_arrays = true werden alle Werte einheitlich als Arrays zurückgegeben, was die Verarbeitung vereinfacht, wenn mehrere Werte pro Tag vorkommen können.
Die Funktion benötigt die aktivierte EXIF-Erweiterung (ext/exif), die seit PHP 7.2 standardmäßig gebündelt (aber nicht automatisch aktiviert) ist. Vor der Verwendung von GPS- oder Thumbnail-Daten empfiehlt sich eine Prüfung, ob die entsprechenden Schlüssel im Rückgabe-Array vorhanden sind.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $file Pflicht | string|resource | Pfad zur Bilddatei (JPEG oder TIFF) als String oder ein geöffneter Stream-Resource-Handle. Remote-URLs werden unterstützt, wenn allow_url_fopen aktiviert ist. |
|
| $required_sections | string|null | null | Kommagetrennte Liste der zu lesenden EXIF-Sektionen, z. B. 'IFD0,EXIF,GPS'. Ist eine Sektion nicht vorhanden, wird sie im Rückgabe-Array einfach ausgelassen. null liest alle verfügbaren Sektionen. |
| $as_arrays | bool | false | Wenn true, werden alle Sektionen als verschachtelte Arrays zurückgegeben, auch wenn nur ein Wert vorhanden ist. Erleichtert konsistente Weiterverarbeitung. |
| $read_thumbnail | bool | false | Wenn true, werden die rohen Thumbnail-Daten (falls vorhanden) in den Rückgabe-Array einbezogen. Diese Daten können direkt als Bilddaten ausgegeben werden. |
Rückgabewert
false zurück, wenn die Datei nicht gelesen werden kann, kein gültiges JPEG/TIFF ist oder die EXIF-Erweiterung nicht verfügbar ist.Beispiele
Grundlegende EXIF-Daten eines Fotos auslesen
<?php
$file = 'foto.jpg';
$exif = exif_read_data($file);
if ($exif !== false) {
echo 'Dateiname: ' . $exif['FileName'] . PHP_EOL;
echo 'Aufnahmedatum: ' . ($exif['DateTimeOriginal'] ?? 'unbekannt') . PHP_EOL;
echo 'Kamera: ' . ($exif['Model'] ?? 'unbekannt') . PHP_EOL;
echo 'Bildbreite: ' . ($exif['COMPUTED']['Width'] ?? 'unbekannt') . ' px' . PHP_EOL;
} else {
echo 'EXIF-Daten konnten nicht gelesen werden.';
}
GPS-Koordinaten aus EXIF-Daten extrahieren
<?php
function exifGpsToDecimal(array $koordinate, string $ref): float {
// Koordinaten liegen als Brüche vor, z.B. ['48/1', '7/1', '3456/100']
$grad = array_map(fn($v) => sscanf($v, '%d/%d'), $koordinate);
$decimal = $grad[0][0] / $grad[0][1]
+ ($grad[1][0] / $grad[1][1]) / 60
+ ($grad[2][0] / $grad[2][1]) / 3600;
return (in_array($ref, ['S', 'W'])) ? -$decimal : $decimal;
}
$exif = exif_read_data('foto.jpg', 'GPS');
if (!empty($exif['GPS']['GPSLatitude']) && !empty($exif['GPS']['GPSLongitude'])) {
$lat = exifGpsToDecimal($exif['GPS']['GPSLatitude'], $exif['GPS']['GPSLatitudeRef']);
$lng = exifGpsToDecimal($exif['GPS']['GPSLongitude'], $exif['GPS']['GPSLongitudeRef']);
printf('Breitengrad: %.6f, Längengrad: %.6f%s', $lat, $lng, PHP_EOL);
} else {
echo 'Keine GPS-Daten vorhanden.' . PHP_EOL;
}
Bildausrichtung (Orientation) für automatische Drehung nutzen
<?php
$exif = exif_read_data('foto.jpg', 'IFD0');
$orientation = $exif['IFD0']['Orientation'] ?? 1;
$bild = imagecreatefromjpeg('foto.jpg');
$bild = match ($orientation) {
3 => imagerotate($bild, 180, 0),
6 => imagerotate($bild, -90, 0),
8 => imagerotate($bild, 90, 0),
default => $bild,
};
header('Content-Type: image/jpeg');
imagejpeg($bild);
imagedestroy($bild);
// Wichtig · Fallstricke
Sicherheitshinweis: EXIF-Daten werden vom Benutzer geliefert und können manipuliert sein. Vertraue niemals unkritisch dem Inhalt von EXIF-Feldern — filtere und validiere alle Werte, bevor du sie in Datenbanken speicherst oder an HTML ausgibst, um SQL-Injection und XSS zu vermeiden.
Datenschutz: GPS-Koordinaten und andere persönliche Metadaten (Gerätename, Seriennummer) können datenschutzrechtlich problematisch sein. Prüfe, ob du diese Daten beim Upload entfernen oder maskieren musst (z. B. mit exif_imagetype() + GD-Neuspeicherung).
Die Funktion unterstützt offiziell nur JPEG- und TIFF-Dateien. Bei anderen Dateitypen oder korrupten Dateien wird false zurückgegeben und ein PHP-Warning ausgelöst — fange dieses ggf. mit @exif_read_data() oder einem eigenen Error-Handler ab.
Ab PHP 7.2 gibt es bei ungültigen EXIF-Daten im Thumbnail-Bereich keine fatalen Fehler mehr, sondern lediglich Warnungen. Ältere PHP-Versionen können bei manipulierten Dateien abstürzen.