finfo_open
finfo_open($flags, $magic_database)
Bereitet die Erkennung von Dateitypen an ihrem Inhalt vor (die Erweiterung fileinfo, die Bibliothek libmagic). Den zurückgegebenen Wert übergeben Sie an finfo_buffer() und finfo_file(). Bei einem Fehler gibt sie false zurück.
Parameter
- $flags – optional: FILEINFO_NONE (eine Textbeschreibung, Standard), FILEINFO_MIME_TYPE (MIME-Typ), FILEINFO_MIME (Typ und Kodierung), FILEINFO_MIME_ENCODING (Kodierung), FILEINFO_EXTENSION (die üblichen Endungen).
- $magic_database – optional, ein Pfad zu einer eigenen libmagic-Datenbank. Ohne ihn wird die eingebaute verwendet.
Beispiele
$finfo = finfo_open(FILEINFO_MIME_TYPE);
// ein PNG-Bild mit 1 × 1 Pixel
$png = base64_decode("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==");
echo finfo_buffer($finfo, $png); // image/png
echo finfo_buffer($finfo, "%PDF-1.4\n"); // application/pdf
// Typ und Kodierung
$typeEncoding = finfo_open(FILEINFO_MIME);
echo finfo_buffer($typeEncoding, "Hallo Käse"); // text/plain; charset=utf-8
// eine Textbeschreibung
$description = finfo_open();
echo finfo_buffer($description, $png); // PNG image data, 1 x 1, 8-bit/color RGBA, non-interlaced
Worauf Sie achten sollten
- Der Typ wird am Inhalt erkannt, nicht an der Endung. Deshalb eignet sie sich zur Prüfung hochgeladener Dateien statt $_FILES["file"]["type"], das der Browser sendet und das sich fälschen lässt.
- Die Ergebnisse unterscheiden sich je nach Version der Bibliothek libmagic: SVG ist in PHP 7.4 image/svg, in PHP 8.3 und neuer image/svg+xml.
- PHP 7.4 gibt eine Ressource zurück, PHP 8.1 und neuer ein finfo-Objekt, das sich selbst freigibt. Deshalb ist finfo_close() seit PHP 8.5 veraltet.
- Sie braucht die Erweiterung fileinfo, unter Windows wird sie in der php.ini aktiviert (extension=fileinfo).
Verwandte Funktionen:
finfo_buffer()
finfo_file()
finfo_close()
mime_content_type()