Ankündigung

Einklappen
Keine Ankündigung bisher.

Rekursives auslesen mit Sortierung

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Rekursives auslesen mit Sortierung

    Hallo,
    Ich hoffe jemand kann mir helfen. Folgendes Problem besteht:
    Ich habe ein PHP Skript, dass rekursiv ein Verzeichnis ausliest und diese schön mit dem Verzeichnis Namen drüber darunter ausgibt. Nun zum Problem: Die Dateien die lose im Verzeichnis sind, werden einfach bestimmten Verzeichnissen zugeordnet, da sie in keinem Ordner sind. Ich schätze ich muss eine weitere IF Verknüpfung bei den Bedingungen einfügen, aber irgendwie stehe ich gerade etwas auf dem Schlauch und weiß nicht so ganz wo ich ansetzten soll.Ich verwende folgendes Skript( und ja ich weiß, dass kann man schlanker schöner und was weiß ich noch machen ,aber es funktioniert einfach reibungslos und macht genau was es soll, dachte ich zumindest bis mir gerade ein Mitarbeiter das erzählt hat)

    PHP-Code:
    <?php
    $hide 
    = array('Thumbs.db');
    // function start
    function scan($folder){
      global 
    $hide$out;

      if(
    $content opendir($folder)){
        while(
    false !== ($file readdir($content))){
          if(
    is_dir("$folder/$file") && $file != "." && $file != ".." && !in_array($file$hide)){
            echo
    "<strong>$file</strong><br>";
            
    scan("$folder/$file");

          } elseif(
    $file != "." && $file != ".." && !in_array($file$hide)){
            echo
    "<a href='DL.php?file=".$file."&folder=".$folder."'>".$file."</a><br>";
          }
        }
        
    closedir($content);
      }

    }
    // function end
    echo scan('\\\\SeS01\\Daten');
    ?>
    Also wie gesagt es liest wunderschön aus und schreibt den Ordner Namen darüber und gibt die Dateien mit DL - Link der den Namen des File trägt aus. Ist ein File keinem Verzeichnis zugeordnet, sondern liegt nur im Überverzeichnis Daten, so wird es einfach unter einem Ordner reingepackt, was aber nicht passieren soll. Ich bedanke mich schon im vorraus für jeden Denkanstoß und jeglicher Hilfestellung, auch wenn sie noch so klein sein sollte.


  • #2
    Nimm doch einen Ansatz hier raus, die funktionieren: https://php-de.github.io/jumpto/verz...lesen-rekursiv

    Sonst mal diesen Weg anwenden: https://php-de.github.io/jumpto/faq/#debugging


    Und noch ein Tipp:
    global solltest du vermeiden, da weiß keiner was in $hide und in $out steht. Alles was eine Funktion braucht, sollte man ihr sichtbar als Parameter übergeben.. keine "Magie"!
    PHP.de Wissenssammlung | Debugging: Finde DEINE Fehler selbst! | mysql_* ist veraltet! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__ | Kein Support per PN

    Kommentar


    • #3
      Sorry aber das ist nicht das was ich suche und brauche. Es gibt 80 Millionen verschiedene Wege rekursiv auszulesen, genau den Ansatz mit "ey nimm doch einfach des her weil des sauberer "programmiert ist", wollte ich nicht. Ich hab dieses Skript nicht umsonst so wie es ist, weil es meine Anforderungen einfach erfüllt.
      Einen How To Debugging Betrag zu verlinken ist meiner Meinung nach völlig unnötig, da die Methode bis jetzt sauber läuft und es immer noch tut. Ich hab lediglich um einen Denkanstoß gebeten und gefragt wie könnte man es gestalten Lose Files im Ordner, zu sortieren.
      Deine Rekursiven Methoden aus dem Beitrag zu verwenden bringt mir rein gar nichts. Rekursiv auszulesen kann ich auch dafür braucht es nicht mal 3 Zeilen, aber es zu sortieren mit Verzeichnis und dann noch hinten rum per Skript die Dateien vom Server zu holen, hab ich bis jetzt nur damit zum laufen gebracht.
      Also wirklich danke wirklich wirklich danke, aber in diesem Sinne bleib ich noch offen für weitere Vorschläge auch wenn ich weiß wie gut du es mit mir meinst

      Kommentar


      • #4
        Sorry aber das ist nicht das was ich suche und brauche. Es gibt 80 Millionen verschiedene Wege rekursiv auszulesen, genau den Ansatz mit "ey nimm doch einfach des her weil des sauberer "programmiert ist", wollte ich nicht. Ich hab dieses Skript nicht umsonst so wie es ist, weil es meine Anforderungen einfach erfüllt.
        Doch ist es, saubere Programmierung macht man nicht um Entwickler im Forum zu beglücken, sondern um unter anderem Änderungen zu vereinfachen und einen möglichst leichten Überblick zu behalten.

        Aktuell gibst du alles aus, sobald du es findest, da ist keine Sortierung möglich. Du musst also in deiner Funktion ein Array zusammenbauen und dieses dann zurückgeben. Hierbei hast du grob zwei Möglichkeiten zur Sotierung, entweder machst du das direkt beim hinzfügen der neuen Werte oder im Nachhinein, wenn du komplett fertig bist gehst du das Array durch und sortierst es.

        Je nach genauer Planung haben beide Möglichkeiten ihre Vor- und Nachteile.

        Kommentar


        • #5
          Zusätzlich zu den sinnvollen Hinweisen meiner Vorposter stelle ich jetzt noch die Funktion "is_dir((string) $filename)" in den Raum.

          Kommentar


          • #6
            Zitat von MApaper Beitrag anzeigen
            . Ich hab dieses Skript nicht umsonst so wie es ist, weil es meine Anforderungen einfach erfüllt.
            Es erfüllt Deine Anforderungen eher nicht, sonst würdest Du nicht hier um Hilfe bitten.

            Der von hausl gepostete Link (rekursiv auslesen) ist astrein.

            Zackedizack, alles in ein Array -> sortieren ->split FileName / Directory -> ausgeben.

            Hier kannst Du auch lamentieren soviel Du willst, es ist falscher Stolz seinen mühsam ertüftelten Code durchsetzen zu wollen, wenn gute Alternativen aufgezeigt werden.

            Da Du den Code eh etwas überarbeiten musst, solltest Du Dir überlegen, die Ausgabe von der Function scan zu trennen.

            'scan(dir)' sollte ein Array zurückgeben und dieses Array einer Funktion zur Ausgabe übergeben werden.
            In etwa so (outputLinks(scan(dir));


            Kommentar


            • #7
              Mhhhh. Oke danke schon mal für die vielen Rückmeldungen! Das mit dem Array wäre mir nicht eingefallen, aber wie unterscheide ich zwischen einem File, dass sich in einem Unterverzeichnis befindet und einem File, dass nur lose im Hauptverzeichnis drin liegt im Array.

              Kommentar


              • #8
                Zitat von MApaper Beitrag anzeigen
                aber wie unterscheide ich zwischen einem File, dass sich in einem Unterverzeichnis befindet und einem File, dass nur lose im Hauptverzeichnis drin liegt im Array.
                Ich rate mal und sage durch den Pfad..
                Es ist schon ein Unterschied ob bild.jpg zurückgegeben wird oder img/bild.jpg

                Rekursiv auszulesen kann ich auch dafür braucht es nicht mal 3 Zeilen, aber es zu sortieren mit Verzeichnis
                sort() sortiert dir das Array

                Weil es, glaube ich, noch nicht angesprochen wurde. Du kannst auch mit glob() die Verzeichnisse holen und danach durchlaufen, falls du mit den Beiträgen der von Hausl geposteten Links nicht zurecht kommst.
                $dirs = glob( '*', GLOB_ONLYDIR);

                Kommentar


                • #9
                  Also ich denke, hier wird wieder viel Trara um nichts gemacht.
                  Die Iteratoren, wie von hausl bereits angesprochen sind das, was am besten geeignet ist. Die Ergebnisse kann man, wie von protestix gesagt bspw. mit sort() sortieren.

                  Eine Kombination dessen zu finden, ist Deine Aufgabe.
                  Hinweis: Du kannst die Iteratoren durchlaufen und das,w as Du wirklich benötigst wegschreiben.
                  Wie, findest Du alles in der offiziellen Doku oder z.T. hier: http://www.php-rocks.de/thema/56-ver...t-der-spl.html
                  Competence-Center -> Enjoy the Informatrix
                  PHProcks!Einsteiger freundliche Tutorials

                  Kommentar

                  Lädt...
                  X