Avatar ·

Wie man die Existenz eines Ordners in PHP überprüft: is_dir, file_exists oder beide?

Hallo zusammen! Ich bin neu in PHP und schreibe ein Skript zum Hochladen von Dateien auf den Server. Ich muss überprüfen, ob das Verzeichnis, in das ich die Dateien speichern werde, existiert. Wenn nicht — es erstellen.

Ich bin auf zwei Funktionen gestoßen: is_dir() und file_exists(). Und jetzt verstehe ich nicht, welche ich verwenden soll. Hier ist mein Code:

$path = '/uploads/images/';

// Variante 1
if (is_dir($path)) {
    echo "Ordner existiert";
} else {
    mkdir($path, 0777, true);
}

// Variante 2
if (file_exists($path)) {
    echo "Ordner existiert";
} else {
    mkdir($path, 0777, true);
}

Beide Varianten scheinen zu funktionieren, aber ich habe ein seltsames Verhalten bemerkt. Wenn man den Pfad zu einer Datei und nicht zu einem Ordner angibt, gibt file_exists() true zurück, während is_dir() false zurückgibt. Das ist verwirrend.

Außerdem habe ich gelesen, dass file_exists() Ergebnisse cached und dies zu Fehlern führen kann. is_dir() hingegen nicht. Aber ich bin mir nicht sicher.