Start · Sprachen · PHP · Referenz · filetype

filetype

Funktion

Gibt den Typ einer Datei oder eines Verzeichnisses als Zeichenkette zurück.

seit PHP 4.0.0 Kategorie: io

Signatur

filetype(string $filename): string|false

Beschreibung

filetype() ermittelt den Typ des angegebenen Pfades und gibt ihn als Zeichenkette zurück. Die möglichen Rückgabewerte sind: fifo, char, dir, block, link, file, socket und unknown. Damit lässt sich schnell feststellen, ob es sich bei einem Pfad um eine reguläre Datei, ein Verzeichnis, einen symbolischen Link oder einen anderen Dateisystemtyp handelt.

Die Funktion ist besonders hilfreich, wenn der genaue Dateisystemtyp eines Eintrags bekannt sein muss, da is_file() und is_dir() nur boolesche Antworten liefern. Mit filetype() können auch spezielle Typen wie Sockets, FIFO-Pipes oder Gerätedateien erkannt werden, die auf Unix-ähnlichen Systemen vorkommen.

Wie viele Dateisystem-Funktionen nutzt PHP intern einen Cache für Stat-Ergebnisse. Falls sich der Dateisystemzustand zwischen zwei Aufrufen geändert hat, sollte clearstatcache() aufgerufen werden, um veraltete Ergebnisse zu vermeiden.

Parameter

Name Typ Default Beschreibung
$filename Pflicht string Pfad zur Datei oder zum Verzeichnis, dessen Typ ermittelt werden soll. Relative und absolute Pfade sind erlaubt.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Dateityp als Zeichenkette zurück. Mögliche Werte sind fifo, char, dir, block, link, file, socket oder unknown. Bei einem Fehler (z. B. wenn der Pfad nicht existiert oder keine Leseberechtigung vorliegt) wird false zurückgegeben und eine E_WARNING-Meldung ausgegeben.

Beispiele

Typ einer regulären Datei und eines Verzeichnisses ermitteln

<?php
// Typ einer regulären Datei ermitteln
$fileType = filetype('/etc/hosts');
echo 'Typ von /etc/hosts: ' . $fileType . PHP_EOL;

// Typ eines Verzeichnisses ermitteln
$dirType = filetype('/etc');
echo 'Typ von /etc: ' . $dirType . PHP_EOL;
?>
Typ von /etc/hosts: file Typ von /etc: dir

Dateityp prüfen und Fehlerbehandlung

<?php
$pfade = [
    '/etc/hosts',
    '/tmp',
    '/dev/null',
    '/nicht/vorhanden',
];

foreach ($pfade as $pfad) {
    $typ = @filetype($pfad);
    if ($typ === false) {
        echo $pfad . ': Fehler beim Ermitteln des Typs' . PHP_EOL;
    } else {
        echo $pfad . ': ' . $typ . PHP_EOL;
    }
}
?>
/etc/hosts: file /tmp: dir /dev/null: char /nicht/vorhanden: Fehler beim Ermitteln des Typs

Stat-Cache leeren und aktuellen Typ abrufen

<?php
$datei = '/tmp/test_filetype.txt';
file_put_contents($datei, 'Hallo');

echo filetype($datei) . PHP_EOL; // file

// Datei löschen und durch Verzeichnis ersetzen
unlink($datei);
mkdir($datei);

// Cache leeren, damit der neue Typ erkannt wird
clearstatcache();

echo filetype($datei) . PHP_EOL; // dir

// Aufräumen
rmdir($datei);
?>
file dir

// Wichtig · Fallstricke

Betriebssystemabhängigkeit: Einige Typen wie block, char, fifo und socket sind nur auf Unix-ähnlichen Systemen verfügbar. Unter Windows liefert filetype() für diese Typen typischerweise unknown.

Symbolische Links: Für symbolische Links gibt filetype() den Wert link zurück, nicht den Typ des Ziels. Um den Typ des Linkziels zu ermitteln, sollte zunächst readlink() und dann erneut filetype() aufgerufen werden.

Stat-Cache: PHP cached Stat-Ergebnisse intern. Bei dynamischen Dateisystemoperationen unbedingt clearstatcache() aufrufen, um veraltete Werte zu vermeiden.