Verzeichnis rekursiv auslesen und formatiert ausgeben

Sprint

Erfahrenes Mitglied
Hallo zusammen,

ich stehe vor dem Problem, ein Verzeichnis, das mit weiteren Ordnern und beliebigen Dateien bestückt ist, auszulesen und alphabetisch sortiert wieder auszugeben. Das Auslesen und sortieren ist kein Problem. Dafür hab ich dieses Script gefunden und für meine Bedürfnisse abgeändert:
PHP:
function dir_rekursiv($verzeichnis) { 
	$dirs[] = $verzeichnis;
	$handle = opendir($verzeichnis); 
	while ($datei = readdir($handle))
		if ($datei != "." && $datei != ".." && is_dir($verzeichnis.$datei)){
			$dirs = array_merge($dirs, dir_rekursiv($verzeichnis.$datei.'/'));
		}elseif ($datei != "." && $datei != ".." && is_file($verzeichnis.$datei))
			array_push($dirs, $verzeichnis.$datei);
	closedir($handle);
	return $dirs;
}

$dirs = dir_rekursiv('./');
natcasesort($dirs);
foreach ($dirs as $dir)
	echo "$dir<br>\n";

Nun wird über die Variable $verzeichnis aber immer der komplette Pfad mit untergebracht. Mein Problem ist nun, diese Liste wie z.B. bei einem Inhaltsverzeichnis zu formatieren, d.h. jeden Unterordner weiter nach rechts einrücken und die jeweils enthaltenen Dateien auch entsprechend einzurücken usw.
Es soll also aus dieser Liste

./phpmailer/
./phpmailer/class.phpmailer.php
./phpmailer/class.pop3.php
./phpmailer/class.smtp.php
./phpmailer/language/
./phpmailer/language/phpmailer.lang-de.php

sowas werden

phpmailer
____class.phpmailer.php
____class.pop3.php
____class.smtp.php
____language
________phpmailer.lang-de.php


Scripte zu dem Thema gibt es zu tausenden, aber alle werden immer nur unformatiert ausgegeben. Irgendwie stehe ich im Moment völlig auf dem Schlauch, wie ich aus dieser Auflistung eine saubere Formatierung hinbekomme. Ich hoffe, daß mir jemand dabei helfen kann.

Vielel Dank schon mal im Voraus,
Sprint
 
Über preg_replace() sollte es nicht so schwierig sein..

PHP:
<?php 
$string = "./diro1/direo2/chmee.txt"; 
$regex = "#[._a-zA-Z0-9]+/#"; 
$replace = "--!"; 
$newString = preg_replace ($regex, $replace, $string, -1 );
echo $newString;

# oder in einer Zeile
$new = preg_replace ("#[._a-zA-Z0-9]+/#", "---", $old, -1 );
# möglicherweise muß das Slash noch ge'backslashed werden
?>
Ach ja, man müsste noch eine Sonderbetrachtung einbauen für den Fall, dass das letzte Zeichen ein Slash ist, somit eine neue Ordnerstruktur anfängt;)

mfg chmee
 
Tja, für einen, der sich mit regulären Ausdrücken auskennt, mag das stimmen. Ich versuche schon seit ewigen Zeiten, das zu kapieren. Leider vergeblich. Auf jeden Fall hat das genau so funktioniert, mit einem gebackslashten Slash.
Vielen Dank für deine schnelle Hilfe,
Sprint
 
Schau mal in meine Sig, da ist -wenn Du mal wieder Lust verspürst- ein Online-Regexp-Tester.

Letztlich sage ich in der RegExp lediglich

Suche nach
(*) Einer Zeichenkombination bestehend aus . _ Buchstaben oder Zahlen
(*) mindestens ein Zeichen lang +
(*) und einem dahinterliegenden /

und ersetze durch ---

mfg chmee
 

Neue Beiträge

Zurück