Explorer ähnliche Verzeichnisanzeige

Razorhawk

Webdesigner und MSP
Ich habe nen kleine Problemchen (naja klein ist gut)
Ich habe mir eine Funktion in einer Klasse geschrieben welche mir alle Verzeichnisse und deren dateien in einem Array speichert! nun hier erstmal die Funktion, denn die werdet ihr brauchen um mein eigentliches problem vielleicht zu verstehen.

PHP:
  class dir_tasks{


   function listdir($base,$subfolders=1) {

    if($subfolders==1){
    // with subfolders
     static $filelist = array();
     static $fileonlylist = array();
     static $dirlist = array();
     static $cutdirlist = array();
    }else{
     // without subfolders
     $filelist = array();
     $fileonlylist = array();
     $dirlist = array();
     $cutdirlist = array();
    }


    if(is_dir($base)) {
       $dh = opendir($base);
       while (false !== ($dir = readdir($dh))) {
           if (is_dir($base ."/". $dir) && $dir !== '.' && $dir !== '..') {

                $subbase = $base ."/". $dir."/";
                $subbase = str_replace("//","/",$subbase);
                $cutdirlist[] = $dir."/";
                $dirlist[] = $subbase;
                $subdirlist = $this->listdir($subbase,$subfolders);
            } elseif(is_file($base ."/". $dir) && $dir !== '.' && $dir !== '..') {
                $filelist[] = $base ."/". $dir;
                $fileonlylist[] = $dir;
            }
        }
        closedir($dh);
    }
    $array['dirs'] = $dirlist;
    $array['cutbasedirs'] = $cutdirlist;
    $array['files'] = $filelist;
    $array['filesonly'] = $fileonlylist;
    return $array;
   }
}

So und nun habe ich mit gebruachen dieser Funktion mir einen Code geschrieben, welche mir wie der explorer die Pfade ausgubt und deren Dateien, welche auf dem Server sind.
Wenn man auf einen Pfad klickt, dann kommt auf die darunterliegenden.
zurück kommt man indem man auf den link " ../ " klickt. Dies ist mit einer einfachen history.back() routine gelöst, da ich es einfach nicht als normalen Link hinbekomme.
Es wird wohl daran liegen, dass ich Sessions benutze indem ich die history der pfade benutze. Denn speichere ich sie nicht, dann komme ich nicht wieder zurück, da das script ja nun nicht weiß bzw. merken kann welches der vorher gehende Pfad war!
Mir missfällt meine Lösung mit Sessions.
Wenn sich jemand dies mal angucken würde und es versteht, dann wäre ich dankbar für einen besseren Lösungsansatz. Der hier kommt mir nicht sehr universell vor (ich glaub ich hab zu kompliziert gedacht)
Und ein ganz großes Problem.. auf meine Heim-PHP-Server zeigt er mir unterpfad an wenn ich anklicke, aber hier zeigt er sie mir nicht an (also online)

website zum testen (auf "Gallerie" und dann "Browser" gehen)

So hier der Code:

PHP:
  echo "<div style='top: 55%;'>";
  if($plane){echo "<a href='javascript:history.back();'>../</a><br>";}

  // für den obersten pfad, da noch nichts in den sessions gespeichert ist
  if($subdir==""){
   $folders = $dirtasks->listdir($uploadimagedir,0);
   $_SESSION['historydir'.$plane][$subdir] = $uploadimagedir;

  // wird benutzt wenn Inhalt in Sessions vorhanden
  }else{
   $folders = $dirtasks->listdir($uploadimagedir,0);
   // zusammensetzen des pfades für die darauf folgende eben
   for($i=1;$i<=($plane);$i++){
  
    $folders = $dirtasks->listdir($_SESSION['historydir'.$plane][$subdir],0);

   }
  }

  $i=0;
  $plane++;
  if(!$action){
   foreach ($folders['cutbasedirs'] as $folder){
     echo "<a href='".$PHP_SELF."?subdir=$i&plane=$plane'>$folder</a> &nbsp;&nbsp;<a href='".$PHP_SELF."?subdir=$i&plane=$plane&action=delete'>Verzeichnis löschen</a><br>";
    // pfade werden gespeichert in eine "Session-Array" abhängig von Pfadnummer ($subdir bzw. $i) in der Pfadebene ($plane)
     $_SESSION['historydir'.$plane][$i]= $folders['dirs'][$i];
     $_SESSION['whichdir'.$plane][$i]= $i;
   $i++;
   }
  }
  echo "</div>";
 
Durch Dein Script steig ich ehrlich gesagt nicht ganz durch.
Ich hab mir hier mal was für den Localhost gestrickt.
Das Script (index.php) sollte im Root liegen, in jedem weitern Verzeichnis dann eine index.php, die ein include referenzierend auf die index.php in Root beihaltet.
Also so:
PHP:
<?
include("../index.php");
bzw.
include("../../index.php");
usw.
?>

Ggf. kannst Du es ja noch verbessern oder global machen.
Evtl. hilft es ja

Gruß webber
 

Anhänge

okay, das wird wohl auch der grund sein, warum kein Mensch hier schreibt.
Ich habe wohl dabei etwas zu kompliziert gedacht.

Ich werd den ganzen Mist eh löschen und ich habe mir schon eine einfachere Variante überlegt, die wesentlich verständlicher ist.

Trotzdem danke für die Antwort und die Nicht-Antworten.
Man weiß es zu schätzen ;) :p
 
Hmm.. ich habe da mal aus Langeweile und Lerneifer ein Code-Snippet geschrieben (findet man bei zend.com - von User "More Dread"). Eine Weiterentwicklung habe ich hier so rumliegen. Das Browsen funktioniert mit einer Datei (in höheren und niedrigeren Verzeichnisebenen) - ohne überall eine Datei hinkopieren zu müssen. Sicherheitstechnisch müsste der Code noch einmal überarbeitet werden, war nur für Adminbereich gedacht.

Bei Interesse oder falls Du noch kein kleines schnelles Script hast -> PN schicken

Greetz,
Neuro
 
Ich habe mir mittlerweile eine geschrieben, welches funktioniert.
Ich übergebe jetzt einfach den pfadnamen per URL!
allerdings nicht den root, sondern erst ab dem pfad von dem an er gezeigt wird und um wieder zurück zu kommen habe ich ein Link "../" in dem die verhergehenden Verzeichnisse gespeichert sind, indem ich mit dem letzten vorkommen des " / " den Pfad dahinter lösche!

Trotzdem danke!
 
Zurück