Signatur
Beschreibung
finfo_open() initialisiert eine neue Fileinfo-Ressource (bzw. ab PHP 8.1 ein finfo-Objekt), die anschließend mit finfo_file() oder finfo_buffer() genutzt werden kann, um Informationen über Dateien oder Rohdaten zu ermitteln – typischerweise den MIME-Typ einer Datei.
Der Parameter $flags steuert, welche Art von Information zurückgegeben werden soll. Die am häufigsten verwendeten Flags sind FILEINFO_NONE (Standardverhalten) und FILEINFO_MIME_TYPE (gibt nur den MIME-Typ zurück, z. B. image/jpeg). Mehrere Flags lassen sich mit dem bitweisen OR-Operator (|) kombinieren.
Über den optionalen Parameter $magic_database kann ein Pfad zu einer eigenen Magic-Datenbank angegeben werden. Wird null übergeben oder der Parameter weggelassen, verwendet PHP die eingebaute Datenbank, was in den meisten Fällen ausreicht.
Nach der Verwendung sollte die Ressource mit finfo_close() freigegeben werden, um Speicher zu sparen – bei der objektorientierten Variante übernimmt der Destruktor diese Aufgabe automatisch.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $flags | int | FILEINFO_NONE | Eine oder mehrere FILEINFO_*-Konstanten, die per | kombiniert werden können. Typische Werte: FILEINFO_NONE, FILEINFO_MIME_TYPE, FILEINFO_MIME_ENCODING, FILEINFO_MIME. |
| $magic_database | ?string | null | Pfad zu einer alternativen Magic-Datenbank-Datei. Bei null wird die in PHP eingebaute Datenbank verwendet. |
Rückgabewert
finfo-Instanz zurück. Bei einem Fehler (z. B. ungültige Datenbank) wird false zurückgegeben.Beispiele
MIME-Typ einer Datei ermitteln
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if ($finfo === false) {
die('Fehler beim Öffnen der Fileinfo-Ressource.');
}
$datei = '/var/www/uploads/bild.jpg';
$mimeType = finfo_file($finfo, $datei);
echo 'MIME-Typ: ' . $mimeType . PHP_EOL;
finfo_close($finfo);
Objektorientierte Verwendung zur Upload-Validierung
<?php
// Objektorientierte Variante (finfo als Klasse)
$finfo = new finfo(FILEINFO_MIME_TYPE);
$erlaubteMimeTypes = ['image/jpeg', 'image/png', 'image/gif'];
foreach ($_FILES['uploads']['tmp_name'] as $tmpName) {
$mimeType = $finfo->file($tmpName);
if (!in_array($mimeType, $erlaubteMimeTypes, true)) {
echo 'Datei abgelehnt: Ungültiger MIME-Typ (' . htmlspecialchars($mimeType) . ')' . PHP_EOL;
} else {
echo 'Datei akzeptiert: ' . htmlspecialchars($mimeType) . PHP_EOL;
}
}
// Destruktor schließt die Ressource automatisch
MIME-Typ und Zeichenkodierung kombinieren
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE | FILEINFO_MIME_ENCODING);
$datei = '/tmp/dokument.txt';
$info = finfo_file($finfo, $datei);
echo $info . PHP_EOL;
finfo_close($finfo);
// Wichtig · Fallstricke
Sicherheitshinweis: Verlasse dich bei der Validierung von Datei-Uploads niemals allein auf die Dateiendung oder den vom Client gemeldeten Content-Type. Nutze stattdessen finfo_open() mit FILEINFO_MIME_TYPE, da diese Funktion den tatsächlichen Dateiinhalt analysiert (Magic Bytes).
Beachte, dass finfo_open() die PECL-Erweiterung fileinfo benötigt, die ab PHP 5.3 fest eingebaut ist. Unter älteren Systemen muss sie ggf. separat installiert werden.
Ab PHP 8.1 ist die zugrunde liegende Ressource ein echtes finfo-Objekt; der prozedurale Stil mit finfo_open() und finfo_close() bleibt aber weiterhin verfügbar.