Signatur
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
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;
?>
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;
}
}
?>
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);
?>
// 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.