is_dir()
Die is_dir()-Funktion ist eine eingebaute PHP-Funktion, die prüft, ob ein angegebener Pfad ein Verzeichnis ist. Sie gibt true zurück, wenn der Pfad ein Verzeichnis ist.
Was ist die is_dir()-Funktion?
Die is_dir()-Funktion ist eine eingebaute PHP-Funktion, die prüft, ob ein angegebener Pfad existiert und auf ein Verzeichnis (Ordner) zeigt. Sie gibt true zurück, wenn der Pfad ein vorhandenes Verzeichnis ist, und false in allen anderen Fällen — eine normale Datei, ein nicht existierender Pfad oder ein Pfad, für den keine Leseberechtigung vorliegt.
Sie gehört zu PHPs Dateisystem-Typprüffunktionen, zusammen mit is_file(), is_link() und file_exists(). Verwenden Sie is_dir(), wenn Sie sicherstellen möchten, dass ein Verzeichnis vorhanden ist, bevor Sie es lesen, darin schreiben oder es erstellen.
Syntax
is_dir(string $filename): bool$filename— der zu prüfende Pfad. Er kann absolut (/var/www/uploads) oder relativ zum aktuellen Arbeitsverzeichnis des Skripts (uploads) sein. Ein abschließender Schrägstrich ist erlaubt.- Rückgabewert —
true, wenn$filenameexistiert und ein Verzeichnis ist, andernfallsfalse.
Grundlegendes Beispiel
__DIR__ ist eine magische Konstante, die immer zu einem vorhandenen Verzeichnis aufgelöst wird, daher gibt dieses Beispiel zuverlässig den Zweig "is a directory" aus.
Ein Verzeichnis von einer Datei unterscheiden
Die häufigste Verwendung von is_dir() ist die Verzweigung anhand dessen, was ein Pfad tatsächlich ist. Vergleichen Sie es mit is_file():
<?php
$paths = [__DIR__, __FILE__, '/path/that/does/not/exist'];
foreach ($paths as $path) {
if (is_dir($path)) {
echo "$path -> directory\n";
} elseif (is_file($path)) {
echo "$path -> file\n";
} else {
echo "$path -> missing\n";
}
}__FILE__ ist der vollständige Pfad des aktuellen Skripts, daher wird es als Datei gemeldet, während der erfundene Pfad als fehlend gemeldet wird.
Ein praktisches Beispiel: Verzeichnis nur erstellen, wenn es fehlt
Das Absichern von mkdir() mit is_dir() vermeidet eine Warnung, wenn der Ordner bereits existiert:
<?php
$dir = sys_get_temp_dir() . '/my_app_cache';
if (!is_dir($dir)) {
mkdir($dir, 0755, true); // true = create parent dirs too
echo "Created: $dir";
} else {
echo "Already exists: $dir";
}Häufige Fallstricke
is_dir()gibtfalsezurück, keinen Fehler, wenn der Pfad nicht existiert. Einfalse-Ergebnis bedeutet nicht "dies ist eine Datei" — der Pfad könnte einfach fehlen. Verwenden Siefile_exists(), wenn Sie nur wissen möchten, ob irgendetwas vorhanden ist.- Symbolische Links werden verfolgt. Wenn der Pfad ein Symlink ist, der auf ein Verzeichnis zeigt, gibt
is_dir()truezurück. Um den Link selbst zu erkennen, verwenden Sieis_link(). - Ergebnisse werden zwischengespeichert. PHP speichert stat()-Ergebnisse im Cache. Wenn ein Verzeichnis von einem anderen Prozess während der Skriptausführung erstellt oder gelöscht wird, erhalten Sie möglicherweise eine veraltete Antwort. Rufen Sie
clearstatcache()auf, um eine neue Prüfung zu erzwingen. - Relative Pfade hängen vom Arbeitsverzeichnis ab.
is_dir('data')wird relativ zum aktuellen Arbeitsverzeichnis (getcwd()) aufgelöst, nicht relativ zum Speicherort des Skripts. Verwenden Sie__DIR__ . '/data', wenn Sie "neben diesem Skript" meinen.
Verwandte Funktionen
| Funktion | Prüft auf |
|---|---|
is_file() | Eine reguläre Datei |
is_link() | Einen symbolischen Link |
file_exists() | Eine existierende Datei oder ein Verzeichnis |
is_readable() | Einen lesbaren Pfad |
scandir() | Den Inhalt eines Verzeichnisses auflisten |
mkdir() | Ein Verzeichnis erstellen |
Fazit
is_dir() ist der sichere, standardmäßige Weg, um zu bestätigen, dass ein Pfad ein vorhandenes Verzeichnis ist, bevor Sie damit arbeiten. Denken Sie daran, dass die Funktion Symlinks verfolgt, ihr Ergebnis zwischenspeichert und relative Pfade gegen das aktuelle Arbeitsverzeichnis auflöst — die Kombination mit file_exists(), is_file() und mkdir() deckt nahezu jede Situation bei der Verzeichnisverarbeitung ab.