W3docs

filetype()

Die Funktion filetype() ist eine eingebaute PHP-Funktion, die den Typ einer Datei als string zurückgibt.

Was ist die filetype()-Funktion?

filetype() ist eine eingebaute PHP-Funktion, die angibt, welche Art von Dateisystemeintrag ein Pfad referenziert — eine reguläre Datei, ein Verzeichnis, ein symbolischer Link usw. Sie nimmt einen einzelnen Pfad entgegen und gibt den Typ als Kleinbuchstaben-string zurück oder false bei einem Fehler.

Dies ist nützlich, wenn Sie ein Verzeichnis durchlaufen und Dateien sowie Unterverzeichnisse unterschiedlich behandeln müssen, wenn Sie überprüfen wollen, ob ein Upload wie erwartet angekommen ist, oder wenn Sie spezielle Einträge (Pipes, Gerätedateien) überspringen müssen, die nicht wie gewöhnliche Dateien gelesen werden sollten.

Die Syntax lautet:

Die PHP-Syntax von filetype()

filetype(string $filename): string|false

Dabei ist $filename ein relativer oder absoluter Pfad zu dem Eintrag, den Sie untersuchen möchten.

Rückgabewerte

filetype() gibt einen der folgenden Strings zurück:

Zurückgegebener stringBedeutung
fileEine reguläre Datei
dirEin Verzeichnis
linkEin symbolischer Link
fifoEine benannte Pipe (FIFO)
socketEin Unix-Domain-Socket
blockEin blockorientiertes Gerät (z. B. eine Festplatte)
charEin zeichenorientiertes Gerät (z. B. ein Terminal)
unknownDer Typ konnte nicht ermittelt werden

Wenn der Pfad nicht existiert oder nicht gelesen werden kann, gibt filetype() false zurück und gibt eine E_WARNING-Meldung aus. Da false beim losen Vergleich als gleich mit dem leeren string gilt, prüfen Sie das Ergebnis immer mit ===, bevor Sie ihm vertrauen.

Wie verwendet man die filetype()-Funktion?

Übergeben Sie einen Pfad und prüfen Sie den zurückgegebenen string:

Grundlegende Verwendung

<?php

$path = __FILE__;          // the path of the currently running script
$type = filetype($path);

echo "The entry '$path' is of type: $type";
// e.g. The entry '/var/www/index.php' is of type: file

Die Verwendung von __FILE__ stellt sicher, dass der Pfad existiert, sodass das Beispiel überall ohne Vorbereitung ausgeführt werden kann.

Umgang mit dem false-Rückgabewert

Da filetype() bei einem fehlenden oder nicht lesbaren Pfad false zurückgibt, sollten Sie den Aufruf absichern, bevor Sie das Ergebnis verwenden. Eine vorherige Prüfung mit file_exists() vermeidet die Warnung vollständig:

Sichere Abfrage

<?php

$path = '/path/that/does/not/exist';

if (!file_exists($path)) {
    echo "Path not found.";
} else {
    $type = filetype($path);
    echo $type === false
        ? "Could not determine the type."
        : "Type: $type";
}
// Path not found.

Dateien und Verzeichnisse beim Durchlaufen unterscheiden

Eine häufige Aufgabe ist das Iterieren über ein Verzeichnis und das Verarbeiten ausschließlich von Dateien oder ausschließlich von Unterverzeichnissen. filetype() macht die Verzweigung explizit:

Verzeichniseinträge klassifizieren

<?php

$dir = sys_get_temp_dir();          // a directory that always exists

foreach (scandir($dir) as $entry) {
    if ($entry === '.' || $entry === '..') {
        continue;                   // skip the self/parent references
    }

    $full = $dir . DIRECTORY_SEPARATOR . $entry;
    echo $entry . ' => ' . filetype($full) . PHP_EOL;
}

Hier listet scandir() den Verzeichnisinhalt auf, und filetype() kennzeichnet jeden Eintrag. Für eine Durchquerung auf niedrigerer Ebene können Sie stattdessen readdir() mit opendir() verwenden.

filetype() vs. is_file() und is_dir()

Wenn Sie nur eine Ja/Nein-Antwort für einen bestimmten Typ benötigen, sind die dedizierten Prädikatfunktionen klarer und erfordern keinen string-Vergleich:

  • is_file()true, wenn der Pfad eine reguläre Datei ist.
  • is_dir()true, wenn der Pfad ein Verzeichnis ist.

Greifen Sie auf filetype() zurück, wenn Sie mehrere mögliche Typen an einer Stelle unterscheiden müssen (z. B. um FIFOs und Sockets zu überspringen), und verwenden Sie is_file() / is_dir(), wenn eine einzelne boolesche Prüfung besser lesbar ist.

Achtung: der Stat-Cache

PHP speichert die Ergebnisse von Dateisystemfunktionen für die Dauer einer Anfrage zwischen. Wenn ein Pfad nach der ersten Prüfung erstellt, gelöscht oder ersetzt wird, kann filetype() einen veralteten Wert melden. Rufen Sie clearstatcache() auf, um eine neue Abfrage zu erzwingen. Beachten Sie auch, dass filetype() symbolischen Links wie stat() folgt — um den Link selbst zu erkennen, verwenden Sie lstat().

Fazit

filetype() gibt die Art eines Dateisystemeintrags als string zurück (file, dir, link usw.) und false bei einem Fehler. Sichern Sie das Ergebnis mit === ab, prüfen Sie den Pfad mit file_exists(), um Warnungen zu vermeiden, und denken Sie an clearstatcache(), wenn Sie einen Pfad erneut prüfen, der sich mitten in einer Anfrage geändert hat. Für einfache Prüfungen eines einzelnen Typs bevorzugen Sie is_file() und is_dir(); für den vollständigen Satz an Dateistatistiken in einem Aufruf siehe stat().

Übungen

Übung
Was macht die Funktion is_file() in PHP?
Was macht die Funktion is_file() in PHP?
Was this page helpful?