Signatur
Beschreibung
finfo_set_flags() ermöglicht es, die Verhaltensoptionen einer bereits erstellten finfo-Instanz nachträglich zu ändern, ohne ein neues Objekt anlegen zu müssen. Die Optionen steuern, wie Dateiinformationen interpretiert und zurückgegeben werden – etwa ob MIME-Typen, MIME-Kodierungen oder rohe Informationen ermittelt werden.
Die verfügbaren Flags sind Konstanten der Form FILEINFO_*, z. B. FILEINFO_MIME_TYPE, FILEINFO_MIME_ENCODING, FILEINFO_NONE oder FILEINFO_CONTINUE. Mehrere Flags lassen sich per bitweisem ODER (|) kombinieren, etwa FILEINFO_MIME_TYPE | FILEINFO_MIME_ENCODING.
Diese Funktion ist nützlich, wenn man in einem Skript dieselbe finfo-Instanz wiederverwenden, aber für unterschiedliche Abfragen unterschiedliche Ausgabeformate benötigt – so spart man die Kosten des wiederholten Ladens der Magic-Datenbank.
Die objektorientierte Entsprechung ist die Methode finfo::set_flags() auf einem finfo-Objekt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $finfo Pflicht | finfo | Eine finfo-Instanz, erstellt z. B. mit finfo_open() oder new finfo(). |
|
| $flags Pflicht | int | Eines oder mehrere FILEINFO_*-Flags, kombinierbar per bitweisem ODER. Steuert das Ausgabeverhalten der nachfolgenden finfo_file()- oder finfo_buffer()-Aufrufe. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. ungültige Flags oder ungültige finfo-Instanz).Beispiele
Flags nachträglich ändern – erst MIME-Typ, dann MIME-Kodierung
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$datei = '/var/www/uploads/bild.png';
// Ersten Aufruf mit MIME-Typ
$mimeType = finfo_file($finfo, $datei);
echo 'MIME-Typ: ' . $mimeType . PHP_EOL;
// Flags auf MIME-Kodierung umstellen
finfo_set_flags($finfo, FILEINFO_MIME_ENCODING);
$mimeEncoding = finfo_file($finfo, $datei);
echo 'Kodierung: ' . $mimeEncoding . PHP_EOL;
finfo_close($finfo);
Objektorientierte Verwendung mit set_flags()
<?php
$finfo = new finfo(FILEINFO_NONE);
$datei = '/tmp/beispiel.txt';
// Zuerst rohe libmagic-Ausgabe
echo $finfo->file($datei) . PHP_EOL;
// Jetzt auf vollständigen MIME-String umschalten
$finfo->set_flags(FILEINFO_MIME_TYPE | FILEINFO_MIME_ENCODING);
echo $finfo->file($datei) . PHP_EOL;
// Wichtig · Fallstricke
Sicherheitshinweis: Beim Prüfen von hochgeladenen Dateien sollte man sich nicht ausschließlich auf den MIME-Typ verlassen, der von finfo ermittelt wird – böswillige Nutzer können Dateiinhalte so gestalten, dass sie legitim aussehen. finfo analysiert zwar den tatsächlichen Inhalt (nicht den vom Client gemeldeten MIME-Typ), aber eine mehrstufige Validierung ist empfehlenswert.
Ungültige oder nicht unterstützte Flag-Kombinationen können dazu führen, dass finfo_file() unerwartete Ergebnisse liefert. Prüfe den Rückgabewert von finfo_set_flags(), um Fehler frühzeitig zu erkennen.