<?php
//Verzeichnis, das ausgelesen werden soll
$dir = './';
session_start();
$absoluteUrl = 'http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
//Prüfen ob closeAll gesetzt ist und auf 1, wenn ja, wird das komplette dir array gelöscht, und somit alle Verzeichnisse geschlossen
if(isset($_GET['closeAll']) && $_GET['closeAll'] == '1') {
unset($_SESSION['dir']);
}
//Prüfen ob der index 'dir' in der session gesetzt ist, wenn nicht wird ein leeres array erzeugt
$_SESSION['dir'] = (isset($_SESSION['dir'])) ? $_SESSION['dir'] : array();
//Prüfen ob $_GET['dir'] gesetzt ist
if(isset($_GET['dir'])) {
//Ist das Verzeichnis im Array schon vorhanden
$key = array_search($_GET['dir'], $_SESSION['dir']);
//Wenn das Verzeichnis bereits existiert, wird er aus dem Array gelöscht, andernfalls gesetzt
if($key !== false) {
unset($_SESSION['dir'][$key]);
} else {
$_SESSION['dir'][] = $_GET['dir'];
}
header("Location: http://". $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) .'/'. basename($_SERVER['PHP_SELF']) .'#'. $_GET['dir']);
}
function recDir($iterator)
{
static $depth = 0;
//Die aktuelle Tiefe um eins erhöhen
$depth++;
//Durchlaufen des Iterators
foreach($iterator as $value) {
//Einen Hash vom Pfad+Dateinamen erzeugen
$hash = md5($iterator->getPathName());
if(is_numeric($hash{0})) {
$hash = "a". $hash;
}
//Ausgabe der/des Dateien/Verzeichnis
if($iterator->isDir()) {
echo str_repeat('---', $depth) .'<a href="'. $absoluteUrl .'?dir='. $hash .'" id="'. $hash .'">'. $value ."</a> (Verzeichnis)<br />\n";
} else {
echo str_repeat('---', $depth) .'<a href="'. $absoluteUrl .'?filename='. urlencode($iterator->getPathName()) .'" id="'. $hash .'">'. $value ."</a><br />\n";
}
//Wenn das Verzeichnis noch weitere Element hat, und der Hash in dem Array 'dir' ist, wird diese Funktion nochmals aufgerufen
if($iterator->hasChildren() && in_array($hash, $_SESSION['dir'])) {
recDir($iterator->getChildren());
}
}
//Die aktuelle Tiefe um eins verringern
$depth--;
}
echo '<style type="text/css">a { color: blue; text-decoration: none; } a:hover {color: orange; text-decoration: underline;}</style>';
echo '<a href="'. $absoluteUrl .'?closeAll=1">Alle Verzeichnise schließen</a><br /><br />';
$foo = new RecursiveDirectoryIterator($dir);
echo ' <div style="float: left; width: 25em;">';
recDir($foo);
echo "</div>";
//Falls der Dateiname eine Zeichenkette mit '..' enthält, wird diese durch ein / ersetzt um Zugriffe auf andere Dateien zu verhindern
$filename = (isset($_GET['filename'])) ? str_replace('..', '/', $_GET['filename']) : false;
$filename = ($filename{0} == '.') ? $filename : '.'. $filename;
if(($filename !== false) && file_exists($filename) && is_file($filename)) {
echo $filename;
?>
<form method="post">
<textarea cols="100" rows="30"><?php echo htmlspecialchars(file_get_contents($filename)); ?></textarea>
</form>
<?php
}
//QUELLE: [url]www.speanet.info[/url]
?>