W3docs

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ückgabewerttrue, wenn $filename existiert und ein Verzeichnis ist, andernfalls false.

Grundlegendes Beispiel

php— editable, runs on the server

__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() gibt false zurück, keinen Fehler, wenn der Pfad nicht existiert. Ein false-Ergebnis bedeutet nicht "dies ist eine Datei" — der Pfad könnte einfach fehlen. Verwenden Sie file_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() true zurück. Um den Link selbst zu erkennen, verwenden Sie is_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

FunktionPrü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.

Übung

Übung
Was ist der Zweck der is_dir()-Funktion in PHP?
Was ist der Zweck der is_dir()-Funktion in PHP?
Was this page helpful?