Signatur
Beschreibung
getimagesize() öffnet eine Bilddatei (lokal oder per URL) und extrahiert grundlegende Informationen wie Breite, Höhe, Bildtyp-Konstante sowie einen fertigen width="…" height="…"-HTML-Attributstring. Die Funktion unterstützt eine Vielzahl von Formaten, darunter JPEG, PNG, GIF, WebP, BMP, AVIF, TIFF, SVG und viele weitere.
Das zurückgegebene Array ist numerisch indiziert: Index 0 enthält die Breite in Pixeln, Index 1 die Höhe in Pixeln, Index 2 eine IMAGETYPE_*-Konstante (z. B. IMAGETYPE_JPEG) und Index 3 einen fertigen HTML-Attributstring ('width="800" height="600"'). Zusätzlich enthält der assoziative Schlüssel 'mime' den MIME-Typ des Bildes.
Der optionale zweite Parameter $image_info wird als Referenz übergeben und kann nach dem Aufruf erweiterte Informationen enthalten, beispielsweise eingebettete IPTC-Daten bei JPEG-Dateien.
Die Funktion ist besonders nützlich, um vor der Ausgabe oder Verarbeitung eines Bildes dessen Abmessungen zu prüfen, den richtigen MIME-Typ zu ermitteln oder in HTML-Templates korrekte Dimensionsangaben einzufügen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $filename Pflicht | string | Pfad zur Bilddatei (lokaler Pfad oder URL). Bei Remote-URLs muss allow_url_fopen in der php.ini aktiviert sein. |
|
| $image_info | array | null | Optionaler Referenzparameter. Nach dem Aufruf kann dieses Array erweiterte Metadaten enthalten, z. B. IPTC-Daten (APP13) bei JPEG-Dateien. |
Rückgabewert
Bei Erfolg ein Array mit mindestens folgenden Einträgen:
[0]— Breite in Pixeln (int)[1]— Höhe in Pixeln (int)[2]— Bildtyp alsIMAGETYPE_*-Konstante (int)[3]— Fertige HTML-Attributzeichenkette, z. B.'width="800" height="600"'(string)'mime'— MIME-Typ des Bildes, z. B.'image/jpeg'(string)'channels'— Anzahl der Farbkanäle (3 für RGB, 4 für CMYK; nur bei JPEG)'bits'— Bit-Tiefe pro Kanal (nicht bei allen Formaten verfügbar)
Im Fehlerfall (Datei nicht lesbar, kein gültiges Bild) wird false zurückgegeben und ein E_WARNING ausgelöst.
Beispiele
Bildabmessungen und MIME-Typ ausgeben
<?php
$info = getimagesize('/var/www/html/images/photo.jpg');
if ($info === false) {
echo 'Datei konnte nicht gelesen werden oder ist kein gültiges Bild.';
} else {
echo 'Breite: ' . $info[0] . ' px' . PHP_EOL;
echo 'Höhe: ' . $info[1] . ' px' . PHP_EOL;
echo 'Bildtyp: ' . $info[2] . ' (IMAGETYPE_JPEG = ' . IMAGETYPE_JPEG . ')' . PHP_EOL;
echo 'MIME-Typ: ' . $info['mime'] . PHP_EOL;
echo 'HTML-Attr: ' . $info[3] . PHP_EOL;
}
Bild im HTML-Template mit korrekten Dimensionen einbinden
<?php
$file = '/var/www/html/images/banner.png';
$info = getimagesize($file);
if ($info !== false) {
// $info[3] enthält den fertigen width/height-Attributstring
echo '<img src="/images/banner.png" ' . $info[3] . ' alt="Banner">';
} else {
echo '<!-- Bild nicht verfügbar -->';
}
Upload-Validierung: Nur echte Bilder akzeptieren
<?php
$uploadedFile = $_FILES['bild']['tmp_name'] ?? '';
if ($uploadedFile === '' || !is_uploaded_file($uploadedFile)) {
die('Kein gültiger Upload.');
}
$info = @getimagesize($uploadedFile);
if ($info === false) {
die('Die hochgeladene Datei ist kein gültiges Bild.');
}
$erlaubteMimeTypes = ['image/jpeg', 'image/png', 'image/webp', 'image/gif'];
if (!in_array($info['mime'], $erlaubteMimeTypes, true)) {
die('Bildformat nicht erlaubt: ' . htmlspecialchars($info['mime']));
}
echo 'Bild akzeptiert: ' . $info[0] . 'x' . $info[1] . ' px, ' . $info['mime'];
// Wichtig · Fallstricke
Sicherheitshinweis: getimagesize() liest tatsächlich Bilddaten und ist daher zuverlässiger als eine reine MIME-Typ-Prüfung über den vom Browser gemeldeten Content-Type. Dennoch ersetzt sie keine vollständige Sicherheitsprüfung bei Datei-Uploads – prüfe zusätzlich Dateigröße, Dateiendung und speichere Uploads außerhalb des Web-Roots.
Performance: Die Funktion muss die Datei (ggf. partiell) lesen. Bei Remote-URLs kann dies zu Latenzen führen. Für reine Typ-Erkennung ohne Dimensionen ist exif_imagetype() schneller, da es nur den minimalen Header liest.
SVG und nicht-rasterbasierte Formate: SVG-Dateien werden nur unter bestimmten Voraussetzungen (libxml) korrekt verarbeitet. Die Pixelangaben können bei vektorbasierten Formaten fehlen oder 0 sein.
Fehlerbehandlung: Bei nicht lesbaren Dateien oder ungültigen Bildformaten gibt die Funktion false zurück und erzeugt ein E_WARNING. Unterdrücke Warnungen mit @ nur, wenn du den Rückgabewert anschließend explizit prüfst.