Signatur
Beschreibung
getimagesizefromstring() ist das Äquivalent zu getimagesize(), arbeitet jedoch nicht mit einer Datei, sondern mit den rohen Binärdaten eines Bildes als PHP-String. Die Funktion analysiert den Bildinhalt und liefert ein Array mit Breite, Höhe, Bildtyp und einem HTML-Attributstring zurück.
Typische Anwendungsfälle sind: Bilder, die per HTTP-Upload bereits im Speicher vorliegen ($_FILES über file_get_contents() gelesen), aus einer Datenbank geladene BLOB-Daten oder Bilddaten, die über eine API oder einen Stream empfangen wurden – ohne sie zuvor temporär als Datei speichern zu müssen.
Das zurückgegebene Array enthält folgende Indizes: [0] = Breite in Pixel, [1] = Höhe in Pixel, [2] = Bildtyp-Konstante (z. B. IMAGETYPE_JPEG), [3] = fertiger HTML-Attributstring (width="x" height="y"), ['mime'] = MIME-Typ und ggf. ['channels'] und ['bits'].
Bei nicht erkannten oder beschädigten Bilddaten gibt die Funktion false zurück. Es empfiehlt sich daher stets eine Überprüfung des Rückgabewertes, bevor auf die Array-Indizes zugegriffen wird.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Die rohen Binärdaten des Bildes als PHP-String. Typischerweise das Ergebnis von file_get_contents(), Datenbank-BLOB oder empfangene Stream-Daten. |
Rückgabewert
0 = Breite, 1 = Höhe, 2 = Bildtyp-Konstante (IMAGETYPE_*), 3 = HTML-Attributstring, 'mime' = MIME-Typ, ggf. 'channels' (RGB=3, CMYK=4) und 'bits' (Bit-Tiefe pro Kanal). Gibt false zurück, wenn das Bild nicht erkannt oder geparst werden konnte.Beispiele
Bildgröße aus einer Datei im Speicher ermitteln
<?php
// Bilddatei in einen String laden (z. B. aus dem Dateisystem oder einer Datenbank)
$imageData = file_get_contents('/pfad/zum/bild.jpg');
$info = getimagesizefromstring($imageData);
if ($info === false) {
echo 'Ungültige oder nicht erkannte Bilddaten.';
} else {
echo 'Breite: ' . $info[0] . ' px' . PHP_EOL;
echo 'Höhe: ' . $info[1] . ' px' . PHP_EOL;
echo 'MIME-Typ: ' . $info['mime'] . PHP_EOL;
echo 'HTML-Attr: ' . $info[3] . PHP_EOL;
}
Bilddaten aus einer Datenbank validieren (BLOB)
<?php
// Simuliert einen aus der Datenbank gelesenen BLOB
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare('SELECT image_data FROM images WHERE id = ?');
$stmt->execute([42]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row && $row['image_data']) {
$info = getimagesizefromstring($row['image_data']);
if ($info !== false) {
// Nur erlaubte Bildtypen akzeptieren
$allowedTypes = [IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF];
if (in_array($info[2], $allowedTypes, true)) {
header('Content-Type: ' . $info['mime']);
echo $row['image_data'];
} else {
http_response_code(415);
echo 'Nicht unterstützter Bildtyp.';
}
} else {
http_response_code(422);
echo 'Ungültige Bilddaten in der Datenbank.';
}
}
Hochgeladenes Bild im Speicher prüfen, ohne temporäre Datei
<?php
// Hochgeladene Bilddaten direkt aus dem temporären Pfad lesen und analysieren
if (isset($_FILES['upload']) && $_FILES['upload']['error'] === UPLOAD_ERR_OK) {
$rawData = file_get_contents($_FILES['upload']['tmp_name']);
$info = getimagesizefromstring($rawData);
if ($info === false) {
echo 'Die hochgeladene Datei ist kein gültiges Bild.';
} elseif ($info[0] > 4000 || $info[1] > 4000) {
echo 'Das Bild ist zu groß (max. 4000×4000 Pixel).';
} else {
echo 'Bild akzeptiert: ' . $info[0] . 'x' . $info[1] . ' (' . $info['mime'] . ')';
}
}
// Wichtig · Fallstricke
Sicherheitshinweis: Die Funktion liest den Bildtyp aus den Binärdaten selbst – nicht aus dem Dateinamen oder dem vom Client gemeldeten MIME-Typ. Dennoch sollte der zurückgegebene Typ immer gegen eine Whitelist zulässiger IMAGETYPE_*-Konstanten geprüft werden, da getimagesizefromstring() keine vollständige Sicherheitsprüfung darstellt.
Speicherverbrauch: Da das gesamte Bild als String im Arbeitsspeicher gehalten wird, ist bei sehr großen Bilddateien auf ausreichend Memory zu achten (memory_limit in der php.ini).
GD-Erweiterung: Die Funktion benötigt die GD-Erweiterung nicht zwingend – sie liest lediglich die Bild-Header aus. Für tatsächliche Bildbearbeitung ist GD oder Imagick erforderlich.