Der Moderne Weg
getcwd() – Aktuelles Verzeichnis holen
Methode: getcwd()
– „Get Current Working Directory“
Rückgabewert: Ein String mit dem aktuellen Pfad, z.B. /var/www/html/meinProjekt/src/code.
Anwendungsbeispiel
echo getcwd();
Ausgabebeispiel
/var/www/html/meinProjekt/src/code.
scandir() – Ordner Scannen
Erklärung: Scannt einen mitgegeben Pfad und gibt Array mit allen Ordner und Dateien zurück.
Methode: scandir(string $verzeichnis)
– Scanne ein Verzeichnis
Eingabe: Ein Pfad zu einem Verzeichnis als String. (kann abosluter aber auch realtiver Pfad sein)
Rückgabwert: Ein Array. Wichtig: Dieses Array enthält immer . (das aktuelle Verzeichnis) und .. (das übergeordnete Verzeichnis). Das Array enthält nur die Namen der Ordner und Dateien, nicht die Pfade.
Anwendungsbeispiel:
Ausgabe:
chdir() – Ordner ändern
Erklärung: Ändert das aktuellen php Arbeitsverzeichnis des Skripts. Alle neuen Operationen werden in diesem Ordner ausgeführt.
Methode: chdir(string $verzeichnis)
– „Change Directory“
Eingabe: Ein Pfad zu einem Verzeichnis als String.
Rückgabwert: Ein Boolean – true = Erfolg | false = Misserfolg
Anwendungsbeispiel:
Ausgabe:
Alternative manuelle Methode
Die manuelle, schrittweise Methode: opendir(), readdir() und closedir() arbeiten zusammen, ähnlich wie beim Lesen einer Datei.
Methode: opendir()
Erklärung: Öffnet ein Verzeichnis zum Lesen und gibt eine „Ressource“ (eine Art Verweis) zurück.
Methode: opendir(string $verzeichnis)
– Scanne ein Verzeichnis 🔍
Eingabe: Ein Pfad zu einem Verzeichnis als String.
Rückgabwert: Ressource – Ein Array. Wichtig: Dieses Array enthält immer . (das aktuelle Verzeichnis) und .. (das übergeordnete Verzeichnis).
Anwendungsbeispiel:
Ausgabe:
Methode: readdir()
Erklärung: Liest den nächsten Eintrag (Datei oder Ordner) aus dem geöffneten Verzeichnis. Du rufst diese Funktion in einer Schleife auf, bis du am Ende angelangt bist.
Methode: readdir(Ressource $handle)
– Scanne ein Verzeichnis 🔍
Eingabe:
Rückgabwert:
Anwendungsbeispiel:
Ausgabe:
Moderne Methode: closedir()
Erklärung: Schließt die Verzeichnis-Ressource wieder. Das ist wichtig, um Ressourcen freizugeben.
Methode: scandir(string $verzeichnis)
– Scanne ein Verzeichnis 🔍
Eingabe:
Rückgabwert:
Anwendungsbeispiel:
Ausgabe:
Anwendung
Szenario: Du bist in ./src/code
und möchtest den Inhalt von ./src/buttons
auflisten.
Es gibt zwei gute Wege, das zu tun.
Weg 1: Mit chdir()
das Verzeichnis wechseln
<?php // Schritt 1: Wo bin ich gerade? (Zur Orientierung) $startVerzeichnis = getcwd(); echo "Start-Verzeichnis: " . $startVerzeichnis . PHP_EOL; // Angenommene Ausgabe: /pfad/zu/deinem/projekt/src/code // Schritt 2: Eine Ebene nach oben gehen (von 'code' zu 'src') chdir('../'); // Schritt 3: In das Zielverzeichnis 'buttons' wechseln chdir('buttons'); // Schritt 4: Das neue aktuelle Verzeichnis scannen $aktuellesVerzeichnis = getcwd(); echo "Aktuelles Verzeichnis: " . $aktuellesVerzeichnis . PHP_EOL; // Ausgabe: /pfad/zu/deinem/projekt/src/buttons $dateien = scandir('.'); // '.' bedeutet "das aktuelle Verzeichnis" echo "Inhalt von 'buttons':" . PHP_EOL; print_r($dateien); ?>
Vorteil: Sehr einfach nachzuvollziehen.
Nachteil: Du veränderst den globalen Zustand deines Skripts. Das kann später im Code zu Verwirrung führen.
Weg 2 (Besser & Sicherer): Pfade zusammensetzen
Anstatt das Verzeichnis des Skripts zu ändern, baust du einfach den korrekten Pfad zum Zielverzeichnis zusammen und übergibst diesen an scandir()
. Dafür nutzen wir die „magische Konstante“ __DIR__
. Sie enthält immer den Pfad zu der Datei, in der sie steht – das ist zuverlässiger als getcwd()
.
<?php // __DIR__ ist der Pfad zur aktuellen Datei, z.B. /pfad/zu/deinem/projekt/src/code echo "Skript-Verzeichnis (__DIR__): " . __DIR__ . PHP_EOL; // Schritt 1: Den Pfad zum Zielverzeichnis 'buttons' erstellen. // Wir gehen vom aktuellen Verzeichnis (__DIR__) eine Ebene hoch ('/../') und dann in 'buttons'. $buttonsVerzeichnis = __DIR__ . '/../buttons'; echo "Ziel-Verzeichnis: " . $buttonsVerzeichnis . PHP_EOL; // Schritt 2: Das Zielverzeichnis direkt scannen, ohne uns zu "bewegen" if (is_dir($buttonsVerzeichnis)) { // Gute Praxis: Prüfen, ob es den Ordner überhaupt gibt $dateien = scandir($buttonsVerzeichnis); echo "Inhalt von 'buttons':" . PHP_EOL; print_r($dateien); } else { echo "Fehler: Verzeichnis nicht gefunden: " . $buttonsVerzeichnis; } ?>
Vorteil:
- Zustandslos: Du änderst nicht, wo dein Skript „denkt“, dass es sich befindet. Dein Code ist robuster und vorhersehbarer.
- Klarheit: Der Code zeigt deutlich, welches Verzeichnis gescannt wird.
Für deinen Anwendungsfall und generell für sauberen Code empfehle ich dir dringend den zweiten Weg. Er ist die moderne und sicherere Praxis. Benutze chdir()
nur, wenn du wirklich einen guten Grund dafür hast