Start · Sprachen · PHP · Referenz · finfo_set_flags

finfo_set_flags

Funktion

Setzt libmagic-Konfigurationsoptionen für eine bestehende <code>finfo</code>-Ressource bzw. ein <code>finfo</code>-Objekt.

seit PHP 5.3.0 Kategorie: io

Signatur

finfo_set_flags(finfo $finfo, int $flags): bool

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

Typ
bool
Beschreibung
Gibt 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);
MIME-Typ: image/png Kodierung: binary

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;
ASCII text text/plain; charset=us-ascii

// 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.