Antwort an „Rolf B“ verfassen

Hallo Raketenwilli,

deine Lösung ist "klassisch" rekursiv ausprogrammiert und würde vermutlich auch in PHP 4 funktionieren. Es gibt aber ein paar Schätze in PHP, die nicht so bekannt sind.

Ist jetzt ungetestet zusammengehauen, ist schlechter lesbar und tut auch weniger als deins. Ich möchte nur zwei Ideen zeigen: Die Iteratorklassen und die Verwendung von anonymen Funktionen (oder Pfeilfunktionen) um Code ein- und auszuschalten.

$rd = new RecursiveIteratorIterator(
         new RecursiveDirectoryIterator("D:\phpweb")
      );

if ($logDelete)
{
  // Moderner: Pfeilfunktion
  $logSuccess = fn($what,$name) => trigger_error("$what '$name' wurde gelöscht", E_USER_NOTICE);
}
else
{
  // Etwas klassischer: Anonyme Funktion
  $logSuccess = function($what,$name) { return false; };
}

// Verzeichnisinhalt einsammeln
$fileInfos = [];
foreach ($rd as $fileInfo)
{
   $fileInfos[] = $rd;
}

// Trefferliste rückwärts abarbeiten, weil "." und ".." je Directory als
// erstes gelistet werden. Damit kann man bei Erreichen von "." einfach
// den Ordner löschen
for ($i = count($fileInfos)-1; $i >= 0; $i--) {
   if ($fileInfos[$i]->isFile() || $fileInfos[$i]->isLink())
   {
      unlink($fileInfos[$i]->getFilename());
      // Todo: Check+Log Error
      $logSuccess('Datei', $fileInfos[$i]->getFilename());
   }
   elseif ($fileInfos[$i]->getFilename() == ".")
   {
      rmdir($fileInfos[$i]->getPath());
      // Todo: Check+Log
      $logSuccess('Verzeichnis', $fileInfos[$i]->getPath());
   }
}

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen