Rekursiv durch die Ordner Landschaft

Rekursiv ist immer ein Thema, dass ich versucht hatte zu umgehen und dann war ich froh, dass in PHP 5 Klassen hinzugekommen sind, die die Iteration und die Rekusrsive Iteration für mich übernehmen. Also kein Kopfzerbrechen mehr über Rekusrsive Funktionen, die die Arrays durchwandern.

Ein Fall:

zB habe ich ein Web zu portieren und muss dabei feststellen, dass Dateien vom PHP geschrieben wurden, die ich (da kein Root) nicht runterziehen kann, da ich der Gruppe nciht angehöre, die der Apache angehört und schon habe ich ein Problem.  Weder darf ich die Dateien runterladen per FTP, noch kann ich ein chmod auf diese anwenden.  Denn das darf nur einer aus der Gruppe. Also schreibe ich eine Rekursive Funktion, die mir alle Dateien vorerst auf 0777 setzt, damit ich die wenigstens runterladen kann.

Früher war das, wenn man es selbst machen wollte eine Last. Dank der heutigen Iterationsklassen, iteriert man alle Dateien und Ordner einfach durch – auch rekursiv – und schon kann man mit einem Aufruf alle Dateien und Ordner ab Punkt x auf 0777 setzen und diese dann per FTP runter laden.

Hier der Code:

<?php
$_GET[‚path‘] = !empty($_GET[‚path‘]) ? ($_SERVER[‚DOCUMENT_ROOT‘] . urldecode($_GET[‚path‘])) : $_SERVER[‚DOCUMENT_ROOT‘];
$pathname = $_GET[‚path‘];
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathname), RecursiveIteratorIterator::SELF_FIRST);
//echo $pathname . ‚<br />‘;//Debuggen
chmod ($pathname , 0777);
foreach($iterator as $item) {
chmod ($item , 0777);
//echo $item . ‚<br />‘;//Debuggen
}

Wenn man diesen code als chmod.php im DOCUMENT_ROOT Verzeichnis abspeichert, werden alle dateien, die sich im Webspace befinden nach dem Aufruf die angegeben Rechte haben.

Wenn man jedoch einen Get Parameter Übergibt, in diesem Falle „path“, dann kann man bestimmen welchen Ordner samit Inhalt man rechtlich ändern will.

Beispiel:  www.meine-seite.de/chmod.php    // Hier werden alle Dateien im Webspace betroffen sein.

Beispiel www.meine-seite.de/chmod.php?path=/images  // Hier wird der Ordner „images“ im DOCUMENT_ROOT samt dadrin enthaltener Dateien und Ordner geändert.

Man könnte in diesem Script natürlich noch die Rechte als GET  Parameter einbauen und im falle der Übergab das Übergebene setzen, ansonsten einen Default Wert zB 0777 wählen.

Für die Rechte muss immer eine oktal Zahl eingegeben werden, da ansonsten die Werte sehr wahrscheinlich nicht dem entsprechen würden, was man sich erhofft zu erzielen.

Es sei denn, man weiß genau,  was man da macht.

Ich hoffe,  jemanden damit geholfen zu haben..

Tom