Ankündigung

Einklappen
Keine Ankündigung bisher.

Ordnerstruktur aus Webverzeichnis ausgeben ?

Einklappen

Neue Werbung 2019

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

  • Ordnerstruktur aus Webverzeichnis ausgeben ?

    Hi,

    ich kenne mich in Php leider nicht wirklich gut aus, ich programmiere aber gerade ein Update Tool, wofür ich eine Php funktion brauche.

    Momentan sieht mein Code folgendermaßen aus:

    PHP-Code:
     <?php 
    foreach (glob("{*.dll,*.exe}",GLOB_BRACE) as $filename

    $md5check md5_file($filename); 
    echo 
    ";$filename;$md5check"

    ?>
    Momentan sieht die Ausgabe für die jeweilige Datei dann so aus:

    ;Dateiname;Md5Checksumme;

    Nun bräuchte ich aber noch den Dateipfad auf dem Webserver in dem die gefundene Datei liegt.

    Als Beispiel:

    Ich habe einen Ordner "Update" auf dem Server darin liegt die obige update.php

    Nun sollen alle Unterordner des "Update" ordners durchsucht werden, genauso wie wiederum deren unterordner.

    Sprich wenn im Ordner Update/Plugins/Group1/ ???_plugin.dll liegt soll folgendes von der php Datei ausgegeben werden:

    ;Pfad(obiges bsp. Plugins/Group1/);Dateiname;Md5Checksumme;

    Ich hoffe, das mir dabei jemand weiterhelfen kann

    mfg Blamaster

  • #2
    Moin,

    du kannst das relativ simpel rekursiv lösen. Du liest erstmal alles im Verzeichnis aus und prüfst, ob das eine Datei oder ein Ordner ist ( is_dir() ). Falls dem so ist, wird die Funktion wieder neu aufgerufen, wenn nicht, endet das Script bzw. die Ausgabe findet statt.

    Das ist mal verharmlost und kann mit Sicherheit auch noch weiter ausgeführt werden, aber als Ansatz soll es erstmal reichen.

    MfG

    Kommentar


    • #3
      Guck mal im Wiki des Boards. Den Artikel dazu habe ich gerade geschrieben. Und benutze die Forumsuche. Es gab da gerade eine Hinweis, dass sich auch Iteratoren davon anbieten.

      Kommentar


      • #4
        Hi,

        hab gerade nochmal die Suche angeworfen und da wurde ja sogar mehr oder weniger genau mein Anliegen schonmal geschildert

        Naja folgeden Code habe ich jetzt jedenfalls gefunden:

        PHP-Code:
        <? 
           function read_recursiv($path) 
           { 
              $result = array();

              $handle = opendir($path); 

              if ($handle) 
              { 
                 while (false !== ($file = readdir($handle))) 
                 { 
                     if ($file != "." && $file != "..") 
                     { 
                        $name = $path . "/" . $file;
                        if (is_dir($name))
                        { 
                           $ar = read_recursiv($name);
                           foreach ($ar as $value)
                           {
                              $result[] = $value;
                           }
                        } 
                        else 
                        { 
                           $result[] = $name;
                        } 
                     } 
                 } 
              } 
              closedir($handle);
              return $result; 
           } 

           $data = read_recursiv("."); 
         
           foreach($data as $value)
             echo "$value<br>\n"; 
        ?>
        Jetzt bin ich gerade am grübeln wie ich es am besten anstelle die Form ;Path;Name hinzubekommen.

        Ich dachte zuerst ich handel das z.B. hier mit ab

        PHP-Code:
        $name $path "/" $file


        Nur dann geht ja die Ordnerprüfung danach nicht mehr auf.

        Also muss es woanders stattfinden am besten direkt bei der Ausgabe
        $result[] = $name; nur da taucht ja schonwieder $name auf, welches ich nicht verändern kann.

        jemand eine Idee ? Ich glaube ich seh mal wieder den Wald vor lauter Bäumen nicht, oder php ist wirklich nicht meine Welt

        mfg Blamaster


        Kommentar


        • #5
          PHP-Code:
          $ar read_recursiv($name);
                             foreach (
          $ar as $value)
                             {
                                
          $result[] = $value;
                             } 
          Umständlich.

          Evtl. letzteres, ja.
          Versuche zu verstehen, wie die Funktion funktioniert! Das Manual ist Dein Freund.

          Kommentar


          • #6
            Naja im groben und ganzen bin ich schon der Meinung den code verstanden zu haben.

            Der obige Teil bis zu dem von dir Zitierten Bereich überprüft praktisch ob gerade ein ordner oder eine Datei vorliegt.

            Wenn Datei dann wird der Dateiname inkl. Path also dem Verzeichnis ins Array result geschrieben.

            Wenn ein Ordner vorliegt wird über die variable $ar die function neu aufgerufen, und $ar bekommt das result übergeben.

            Das wiederum wird dann $value zugewiesen und kommt auch ins Array result.

            Nur wirklich weiter komme ich dadurch auch noch nicht.


            Edit. Mir kam gerade ein geistesblitz und es funktioniert auch, nur weiß ich jetzt nicht ob das auch die optimalste Lösung ist:

            PHP-Code:
            <? 
               function read_recursiv($path) 
               { 
                  $result = array();

                  $handle = opendir($path); 

                  if ($handle) 
                  { 
                     while (false !== ($file = readdir($handle))) 
                     { 
                         if ($file != "." && $file != "..") 
                         { 
                            $name = $path . "/" . $file;
                            $eintrag = ";$path;$file"; 

                            if (is_dir($name))
                            { 
                               $ar = read_recursiv($name);
                               foreach ($ar as $value)
                               {
                                  $result[] = $value;
                               }
                            } 
                            else 
                            { 
                               $result[] = $eintrag;
                            } 
                         } 
                     } 
                  } 
                  closedir($handle);
                  return $result; 
               } 

               $data = read_recursiv("."); 
             
               foreach($data as $value)
                 echo "$value<br>\n"; 
            ?>






            Kommentar


            • #7
              Naja, sieht doch ganz gut aus. Das $eintrag kannste Dir zwar sparen und direkt zuweisen, aber sonst. Wenn Du willst guck nochmal ins Wiki und schau Dir an, wie man die if Struktur noch umstellen kann (wenn man das mag). Ist auch erklärt der Artikel. Und das was ich oben 'umständlich' bezeichnet habe ist dort auch anders gelöst.

              [edit]
              Oh, ganz wichtig, sehe ich gerade: Das closedir($handle); muß natürlich in die if ($handle) {} Struktur rein.

              Kommentar


              • #8
                Ist korrigiert

                Jetzt fehlt nur noch eins. Wie kann ich .php und .html Datein ausschließen ?

                Ich habe es so versucht aber es funktioniert nicht:

                if ($file != "." && $file != ".." && $file != "*.html" && $file != "*.php")

                Kommentar


                • #9
                  Für solche Fälle schau Dir mal glob () an.

                  Kommentar


                  • #10
                    Meine vorherige funktion basierte ja auf glob, da konnte ich ebend angeben, nach welchen Datein er suchen soll.

                    Nur mit glob funktioniert ja keine recursive Suche, deswegen hab ich ja nun auch diese Funktion umgebaut gehabt.

                    mfg blamaster

                    Kommentar


                    • #11
                      Ah, ja ok. Hatte ich vergessen. Bevor ich da jetzt drüber nachdenke, schau Dir stattdessen mal fnmatch () an. K.A. wie performant das ist, aber ist jedenfalls dafür ausgelegt.

                      [edit]
                      Oh.
                      For now this function is not available on Windows or other non-POSIX compliant systems.
                      Ausprobieren!

                      Kleiner Tipp: Im Manual unter den jeweiligen Funktionen immer auch die Querverweise zu verwandten Funktionen achten. fnmatch habe ich bei glob gefunden.

                      Kommentar


                      • #12
                        Okay Danke

                        mfg Blamaster

                        Kommentar

                        Lädt...
                        X