Start · Sprachen · PHP · Referenz · finfo_close

finfo_close

Funktion

Schließt eine zuvor mit <code>finfo_open()</code> geöffnete Fileinfo-Ressource und gibt die damit verbundenen Ressourcen frei.

seit PHP 5.3.0 Kategorie: io

Signatur

finfo_close(finfo $finfo): bool

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

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

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.