W3docs

is_file()

Die Funktion is_file() in PHP prüft, ob ein Pfad eine reguläre Datei ist, und gibt true zurück, wenn dies der Fall ist.

Was ist die Funktion is_file()?

is_file() ist eine eingebaute PHP-Funktion, die angibt, ob ein Pfad auf eine reguläre Datei zeigt — eine gewöhnliche Datei auf dem Datenträger, im Gegensatz zu einem Verzeichnis, dem Zieltyp eines symbolischen Links oder einer Sonderdatei (Pipe, Socket oder Geräteknoten). Sie gibt true nur für reguläre Dateien zurück und false für alles andere, einschließlich Pfade, die nicht existieren.

Diese Funktion verwendet man, bevor man versucht, eine Datei zu lesen, einzubinden oder zu verarbeiten, wenn „zeigt dieser Pfad tatsächlich auf eine Datei, mit der ich arbeiten kann?" wichtiger ist als „existiert dieser Pfad überhaupt?".

Syntax

is_file(string $filename): bool
  • $filename — der zu prüfende Pfad. Er kann relativ (aufgelöst gegen das aktuelle Arbeitsverzeichnis) oder absolut sein.
  • Rückgabewerttrue, wenn $filename existiert und eine reguläre Datei ist, andernfalls false. Es wird keine Warnung ausgegeben, wenn die Datei fehlt; man erhält einfach false.

Einfaches Beispiel

php— editable, runs on the server

Mit __FILE__ (dem absoluten Pfad des aktuellen Skripts) ist sichergestellt, dass die Prüfung erfolgreich ist, sodass das Skript eine Meldung ausgibt, die bestätigt, dass der Pfad eine reguläre Datei ist. Tauschen Sie einen beliebigen Pfad ein — ein fehlender Pfad oder ein Verzeichnis gibt false zurück.

is_file() vs. file_exists() vs. is_dir()

Diese drei Funktionen überschneiden sich, und die falsche Wahl ist eine häufige Fehlerquelle:

FunktionGibt true zurück für
is_file()nur reguläre Dateien
file_exists()Dateien und Verzeichnisse
is_dir()nur Verzeichnisse

Die häufige Falle: file_exists('/some/folder') ist true für ein Verzeichnis. Wenn man dann versucht, es mit fopen() zu öffnen oder mit include einzubinden, erhält man einen Fehler. Verwenden Sie is_file(), wenn der nächste Schritt eine echte Datei erwartet:

<?php

$path = sys_get_temp_dir(); // a directory that definitely exists

var_dump(file_exists($path)); // bool(true)  — it exists
var_dump(is_file($path));     // bool(false) — but it is NOT a file
var_dump(is_dir($path));      // bool(true)  — it is a directory

Einen Dateilesezugriff absichern

Ein typischer Praxisanwendungsfall: Bestätigen Sie, dass der Pfad eine nutzbare Datei ist, bevor Sie sie lesen. Die Kombination von is_file() mit is_readable() vermeidet sowohl „keine Datei"- als auch „keine Berechtigung"-Fehler:

<?php

$path = __FILE__;

if (is_file($path) && is_readable($path)) {
    echo "Safe to read: " . basename($path);
} else {
    echo "Cannot read that path.";
}

Dies gibt eine Ausgabe wie Safe to read: is-file.mdx aus (den Basisnamen des laufenden Skripts) und bricht sauber ab, wenn der Pfad ein Verzeichnis ist, fehlt oder nicht lesbar ist.

Die stat-Cache-Falle

PHP speichert die Ergebnisse von Dateisystemprüfungen wie is_file() für die Dauer einer Anfrage zwischen, um wiederholte Festplattenzugriffe zu vermeiden. Wenn eine Datei nachdem PHP denselben Pfad bereits geprüft hat erstellt oder gelöscht wird, kann ein zweiter is_file()-Aufruf die veraltete, gecachte Antwort zurückgeben. Wenn Sie ein aktuelles Ergebnis benötigen — zum Beispiel in einem langläufigen Skript, das eine Datei erstellt und sie sofort erneut prüft — leeren Sie den Cache zuerst:

<?php

clearstatcache();          // discard cached stat results
var_dump(is_file($path));  // now reflects the current state on disk

Häufige Fallstricke

  • Es ist keine Sicherheitsprüfung. Ein Pfad kann is_file() bestehen und trotzdem nicht les- oder schreibbar sein. Kombinieren Sie es mit is_readable() oder is_writable(), bevor Sie handeln.
  • Symbolische Links werden aufgelöst. is_file() prüft das Ziel eines Symlinks, nicht den Link selbst. Ein Symlink, der auf eine reguläre Datei zeigt, gibt true zurück.
  • Keine Warnung bei fehlenden Pfaden. Im Gegensatz zum Öffnen einer Datei gibt ein nicht existierender Pfad einfach false zurück, sodass is_file() sicher ohne Fehlerunterdrückung aufgerufen werden kann.

Fazit

is_file() beantwortet eine präzise Frage — „ist dies eine reguläre Datei?" — und ist die richtige Prüfung vor jedem Code, der eine Datei liest, einbindet oder verarbeitet. Greifen Sie auf file_exists() zurück, wenn auch ein Verzeichnis akzeptabel wäre, auf is_dir(), wenn Sie gezielt einen Ordner suchen, und kombinieren Sie is_file() mit den oben genannten Lesbarkeitssprüfungen, wenn Berechtigungen eine Rolle spielen.

Übung

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