Signatur
Beschreibung
finfo_close() gibt alle Ressourcen frei, die einer mit finfo_open() erzeugten Fileinfo-Instanz zugeordnet sind. Das ist die prozedurale Entsprechung des objektorientierten Ansatzes über die finfo-Klasse.
Obwohl PHP Ressourcen am Ende eines Skripts automatisch freigibt, ist es eine gute Praxis, finfo_close() explizit aufzurufen, sobald die Fileinfo-Instanz nicht mehr benötigt wird – insbesondere bei lang laufenden Skripten oder bei der Analyse vieler Dateien, um unnötigen Speicherverbrauch zu vermeiden.
Ab PHP 8.0 ist der Typ des Parameters von der veralteten resource-Darstellung auf das native Objekt finfo umgestellt worden, sodass die Klasse und die prozeduralen Funktionen dasselbe Objekt verwenden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $finfo Pflicht | finfo | Eine Fileinfo-Instanz, die zuvor mit finfo_open() erzeugt wurde. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn die übergebene Instanz ungültig ist).Beispiele
MIME-Typ einer Datei ermitteln und Ressource schließen
<?php
// Fileinfo-Instanz öffnen
$finfo = finfo_open(FILEINFO_MIME_TYPE);
if ($finfo === false) {
die('Fehler beim Öffnen der Fileinfo-Instanz.');
}
$datei = '/var/www/html/bild.png';
$mimeType = finfo_file($finfo, $datei);
echo 'MIME-Typ: ' . $mimeType . PHP_EOL;
// Ressource freigeben
finfo_close($finfo);
?>
Datei-Upload-Validierung mit anschließendem Schließen
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$erlaubteMimeTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (isset($_FILES['upload'])) {
$tmpPfad = $_FILES['upload']['tmp_name'];
$mimeType = finfo_file($finfo, $tmpPfad);
if (in_array($mimeType, $erlaubteMimeTypes, true)) {
echo 'Datei ist erlaubt: ' . $mimeType . PHP_EOL;
// Datei weiterverarbeiten ...
} else {
echo 'Unerlaubter Dateityp: ' . $mimeType . PHP_EOL;
}
}
// Immer die Ressource freigeben, auch bei Fehlern
finfo_close($finfo);
?>
// Wichtig · Fallstricke
Sicherheitshinweis: Verlasse dich beim Validieren von Datei-Uploads niemals allein auf den vom Client übermittelten MIME-Typ ($_FILES['upload']['type']), da dieser leicht gefälscht werden kann. Nutze stattdessen finfo_file(), um den echten MIME-Typ serverseitig zu prüfen, und schließe die Instanz danach mit finfo_close().
Ab PHP 8.0 ist finfo ein echtes Objekt. Im objektorientierten Stil kann statt finfo_close() einfach unset($finfo) verwendet oder auf das explizite Schließen verzichtet werden, da der Destruktor die Ressource automatisch freigibt.