Verzeichnis auslesen

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

  • #16
    ... und wennste ein anderes script verwendest - wär' das schlimm?

    Ich hab so ziemlich überhaupt keine Ahnung was php ist, für mich sind php - Dateien sowas Ähnliches wie es die exe - Dateien sind, die ich auf meinen M$ Win - harddrives finde und die ich zur Ausführung irgendeiner Funktion anklicke. Darum kann ich zu den Fragen zu Deinem Script nix Konstruktives beifügen, sorry.

    Ich verwende das folgende Ding um auf meinen Webspeicherplätzen spazieren zu gehen. Ich modifiziere es von Fall zu Fall, meistens mit html - Befehlen (ebent weil ich mit php nicht zurecht komme).
    Ich hänge im nächsten Beitrag noch ein anderes script an, mit dem man nicht in einzelne Directories reingucken kann, sondern das Directories samt enthaltenen Dateien auflistet - so 'ne Art totale sitemap.
    Vielleicht kannste damit Dein Ziel erreichen?

    Ich nenne die folgende Datei walk_t wobei das t für Text steht. Eine andere, ähnliche Datei (von dieser hier abgeleitet) kann Bilder anzeigen, sie heißt walk_p wobei p für picture steht und eine Kombination aus beiden nenne ich walt_tp, wobei beides angezeigt wird, Dateinamen als auch das zugehörige Bild.

    <?php

    # Do we have a path? if not, it's the current directory
    $path = $_GET["path"];
    if( !isset( $path ) || $path == "" ) {
    $path = ".";
    }

    # Print out for navigation
    echo "current path: <b>" . $path . "</b><br />\n";

    echo "&nbsp;<br><b>directories</b><br />\n";

    # Initialise list arrays, directories and files separately and array counters for them
    $d_arr = array(); $d = 0;
    $f_arr = array(); $f = 0;

    # Open possibly available directory
    if( is_dir( $path ) ) {
    if( $handle = opendir( $path ) ) {
    while( false !== ( $file = readdir( $handle ) ) ) {

    # Make sure we don't push parental directories or dotfiles (unix) into the arrays
    if( $file != "." && $file != ".." && $file[0] != "." ) {
    if( is_dir( $path . "/" . $file ) )

    # Create array for directories
    $d_arr[$d++] = $file;
    else

    # Create array for files
    $f_arr[$f++] = $file;
    }
    }
    }
    }

    # Wrap things up if we're in a directory
    if( is_dir( $handle ) ) closedir( $handle );

    # Sort and reset the arrays
    asort( $d_arr ); reset( $d_arr );
    asort( $f_arr ); reset( $f_arr );

    # Print a parent directory link
    $d_prev = substr( $path, 0, ( strrpos( dirname( $path . "/." ), "/" ) ) );

    // insert
    // please do not show me a faked link, you naughty boy!
    if ($path == ".") { echo "parent directory - weita rauf gez nich mer<br />\n";
    }
    else
    // /insert

    echo "<a href=\"?path=" . $d_prev . "\">parent directory</a><br />\n";

    # Print the directory list
    for( $i=0; $i < count( $d_arr ); $i++ ) {

    # Print with query string
    echo "<li> <a href=\"?path=" . $path . "/" . $d_arr[$i] . "\">" . $d_arr[$i] . "</a>/<br />\n";

    # Alternate, without the "[ D ]" for "directory",
    # delete "[ D ] " (note the white space) in the echo line

    }

    echo "</ol><ol>\n";

    echo "<b>files</b><br />\n";
    # Print file list
    for( $i=0; $i < count( $f_arr ); $i++ ) {

    # Only print path and filename

    # verberge index.htm usw
    if( "$f_arr[$i]" != "index.htm" )
    if( "$f_arr[$i]" != "walk_t.php" )
    #echo "<br>ich habe ihn!<br>";

    echo "<li> <a href=\"" . $path . "/" . $f_arr[$i] . "\"> " . $f_arr[$i] . "</a>";

    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
    echo "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";

    # Alternate, without the "[ F ]" for "file",
    # delete "[ F ] " (note the white space) in the echo line


    # Alternate, without file size function, this is the correct place to comment it out
    # delete the "#" sign in front of "/" and "*" after last line of this comment
    # and follow the last "Alternate" recommendation below
    # Both must be done - or nothing. One comment lonely results in an error message.
    # Without white space between slash and asterix.


    # We may want a file size. NOTE: needs $path to stat
    if( filesize( $path . "/" . $f_arr[$i] ) >= 1024 ) {

    # verberge index.htm usw
    if( "$f_arr[$i]" != "index.htm" )
    if( "$f_arr[$i]" != "walk_t.php" )
    #echo "<br>ich habe ihn!<br>";

    # Size in kilobytes
    echo " " . round( filesize( $path . "/" . $f_arr[$i] ) / 1024, 1 ) . " KB<br />\n";
    } elseif( filesize( $path . "/" . $f_arr[$i] ) >= 1048576 ) {

    # verberge index.htm usw
    if( "$f_arr[$i]" != "index.htm" )
    if( "$f_arr[$i]" != "walk_t.php" )
    #echo "<br>ich habe ihn!<br>";

    # Size in megabytes
    echo " " . round( filesize( $path . "/" . $f_arr[$i] ) / 1024 / 1024, 1 ) . " MB<br />\n";
    } else {

    # verberge index.htm usw
    if( "$f_arr[$i]" != "index.htm" )
    if( "$f_arr[$i]" != "walk_t.php" )
    #echo "<br>ich habe ihn!<br>";

    # Size in bytes
    echo " " . filesize( $path . "/" . $f_arr[$i] ) . " bytes<br />\n";
    }


    # Without white space between asterix and slash.
    # Alternate, without file size function, this is the correct place to comment it out
    # delete the "#" sign in front of "*" and "/" before first line of this comment
    # and look for the "Alternate" recommendation a few lines upwards.
    # Both must be done - or nothing. One comment lonely results in an error message.
    # And
    # once the file size function is commented out, line breaks "<br />" are lost.
    # To get them back, needs to uncomment also the following line.
    #echo "<br />\n";

    }

    ?>



    Die englischen Kommentare sind nur teilweise von mir.
    Das Anzeigen der file sizes kann man durch Auskommentieren unterdrücken - muß dann aber ganz unten den Zeilenumbruch ent - kommentieren.

    Wenn der code jemandem als föllich vermurxt vorkommt - dann bitte ich um Nachsicht.
    Ich bin Laie.
    Aber - dies Ding sollte eigentlich überall funktionieren - egal ob's ein X - oder Win - Server ist auf den es kopiert wird.


    Ich wünsche Dir Glück damit - wenn es Dir überhaupt eine Hilfe ist.
    Zuletzt geändert von cheC; 22.11.2005, 21:03.
    Alles ist schön was man in Liebe betrachtet
    -
    Humor is wennste trotzdem lachst

    Kommentar


    • #17
      Bei diesem Script habe ich mir die Herkunft und Kommentare des Verfassers notiert. Bei vorangeganenem Script kann ich leider nicht mehr sagen woher ich es habe, möglicherweise von http://php.net/.

      <?php

      /*
      http://de2.php.net/manual/de/ref.filesystem.php (Herkunft)

      peeweek at altern dot org (Verfasser)
      09-May-2003 02:06

      here is a function that recurses all directories in a Windows Tree then displays for each directory its contents
      */


      function ls ($curpath) {
      $dir = dir($curpath);

      #echo("<b>$curpath</b>");
      #echo "<blockquote>";
      while ($file = $dir->read()) {

      if($file != "." && $file != "..") {
      if (is_dir($curpath.$file)) {
      echo("<b> $file / </b><br>");
      #ls($curpath.$file."\\");
      ls($curpath.$file."/");
      } else {
      echo("<dd><li> $file </li></dd>");
      }
      }
      }
      $dir->close();
      #echo "</blockquote>";
      return;
      }

      #Use:
      #$startpath = "D:\\something\\";

      ls($startpath);

      ?>



      $startpath muß beim obersten pub dir beginnen
      möglicherweise gibt es eine weniger starre Lösung,
      das Start dir zu finden. Ich finde das leidige Theater mit dem Herumsuchen nach dem Start dir stets gräßlich und um der Bequemlichkeit halber kopiere ich es aus den felermeldungen.

      reales Beispiel
      $startpath = "/var/nfsc1b/vchosts/username/domainname_dot_de/zu_durchsuchendes_directory/";
      Alles ist schön was man in Liebe betrachtet
      -
      Humor is wennste trotzdem lachst

      Kommentar


      • #18
        Hi Chrissi82, war gestern abend zu spät. Musste nach Hause.
        Vergiss mal den den Kram von cheC, die function die Du hast reicht völlig aus.

        Deine Query scheint nix zurück zuliefern, also liegt der Fehler wohl vorher,vielleicht schon bei der userid?
        Was kommt denn raus, wenn Du
        PHP-Code:
        $userid $_SESSION['user_id'];
        $query "SELECT link FROM dream WHERE id = '$userid'";
        echo 
        "Meine Abfrage: $query<br>";
        $erg mysql_query($query);
        if (!
        $erg
               echo 
        mysql_error();
        else {
             
        $row mysql_fetch_object($erg); 
             
        print_r($row);
             
        $link $row->Link;

        probierst?
        Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

        Kommentar


        • #19
          Vielen Dank erstmal für eure Hilfe... weiß nicht was ich ohne euch machen würde...
          @thommyk: Ich habe deine Version mal ausprobiert... und es sieht schon etwas besser aus, die Ausgabe ist Folgende:

          Meine Abfrage: SELECT Link FROM dream WHERE id = '20'
          stdClass Object ( [Link] => c:\\Inetpub\\wwwroot\\logintest\\geodaten\\20_chrissie1982 ) c:\\Inetpub\\wwwroot\\logintest\\geodaten\\20_chrissie1982
          .
          ..
          17237 Blankensee
          Array ( )
          Also 17237 Blankensee ist zumindest der nächste Unterordner in 20_chrissie1982... allerdings hat dieser dann noch 2 Unterordner, in denen dann die Bilder und pdf's liegen... Ich müßte mich also irgendwie zu denen durchklicken können... wie könnt ich denn das jetzt machen??
          Ich schreibe den Pfad auch nur aus dem Grund in die Datenbank, um sicherzustellen, dass nur der jeweilige User in sein Verzeichnis kommt... also jeder User hat seinen eigenen Ordner in der Datenbank, jeweils zusammengesetzt aus ID und Benutzername... Und dann will ich anhand von ID und Benutzername prüfen, ob jemand Zugang hat oder nicht... hab ich mir zumindest so überlegt... hoffe das geht auch...

          Kommentar


          • #20
            Wieso sind eigentlich die \ im Verzechnisnamen bei Dir doppelt, oder liegt das nur an der Ausgabe im Forum?.
            Sollte eigentlich so aussehen:
            c:\Inetpub\wwwroot\logintest\geodaten\20_chrissie1982

            Immerhin scheint ja der SQL-Teil zu funzen und die Funktion wird auch richtig aufgerufen. Allerdings scheints dann beim nächsten Verzeichnis, das ja wieder mit der function durchgegangen werden soll, hängen zu bleiben und $result wird auch nicht richtig gespeichert.
            Ich hab mal die {} Klammern rausgenommen und die Ausgabe erweitert.
            PHP-Code:
            function readDirectory($dir) {
                echo 
            'Startverzeichnis'.$dir.'<br>';
                
            $result = array();
                
            #wenn Verzeichnis, dann durchsuchen
                
            if ( $d openDir($dir) ) {
                    while ( 
            $f readDir($d) ) {
                        
            #Datei- oder Verzeichnisname ausgeben
                        
            echo 'Datei gefunden:'.$f.'<br>';
                        
            #wenn  nicht . oder .. 
                        #(Verzeichnis selbst bzw. übergeord. Verzeichnis
                        
            if ( !preg_match("/^.|..$/"$f) ) {
                            
            #Beim Verzeichnis funktion wieder aufrufen mit diesem Name
                            
            if ( is_dir($f) ) {
                                echo 
            "durchsuche Unterverzeichnis $f<br>";                
                                
            $result[$f] = readDirectory("$dir/$f");
                            }
                            
            #Datei mit Dateigroesse speichern
                            
            else {
                                echo 
            "speichere f$ in result<br>";
                                
            $result[$f] = filesize("{$dir}/{$f}");
                                echo 
            '<pre>'print_r($result); echo '</pre>';
                            }                    
                        }
                    }
                    
            #Verzeichniszeiger wieder schliessen
                    
            closeDir($d);
                }
                
            #Fehlermeldung bei nichtöffnen
                
            else echo $dir.' konnte nicht geoeffnet werden<br>';
               
            #Rückgabe Ergebnisarray
                
            return $result;
              }

            $baum readDirectory($link); // Ergebnis speichern
            echo '<pre>'print_r($baum);echo '</pre>';  //Ergebnis ausgaben 
            Sowas solltest Du dann aber langsam auch mal selbst machen können, auch als Anfänger. Fehlersuche heisst meistens Ausgaben, Ausgaben, Ausgaben, und diese dann Schritt für Schritt kontrollieren um den Fehler zu lokalisieren.
            Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

            Kommentar


            • #21
              Und ein paar Kommentare hab ich auch mal reingemacht. Gewöhn Dir das besser an , sonst weisst Du später nicht mehr, was so ein Skript macht und musst es wieder mühsam durchgehen.
              Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

              Kommentar


              • #22
                Vielen Dank für die Mühe, die du dir mit mir machst...
                Ich habe das Verzeichnis mit den doppelten / in der Datenbank abgelegt... hatte irgendwo gelesen das man das so machen sollte... braucht man es denn nicht??
                Irgendwie scheint die Funktion keine Unterverzeichnisse zu finden...
                ich werd mal noch bissl was damit probieren...
                Die Ausgabe sieht momentan so aus:

                Meine Abfrage: SELECT Link FROM dream WHERE id = '20'
                stdClass Object ( [Link] => c:\\Inetpub\\wwwroot\\logintest\\geodaten\\20_chrissie1982 ) Startverzeichnisc:\\Inetpub\\wwwroot\\logintest\\geodaten\\20_chrissie1982
                Datei gefunden:.
                Datei gefunden:..
                Datei gefunden:17237 Blankensee

                Array
                (
                )


                Kommentar


                • #23
                  Hi, war gestern schon weg.

                  Es liegt an Deinem regulären Ausdruck im preg_match. der war falsch.
                  Bei | muss man Klammern drum setzen.
                  Zweiter Fehler war beim is_dir($f) , das muss noch $dir mit bei.
                  Probier mal ab dem preg_match:

                  PHP-Code:
                              #wenn  nicht . oder ..
                              #(Verzeichnis selbst bzw. übergeord. Verzeichnis
                              
                  if (!preg_match("/^(.|..)$/ismU"$f) )  # bei | Klammer setzen
                              
                  {
                                  
                  #Beim Verzeichnis funktion wieder aufrufen mit diesem Name
                                  
                  if ( is_dir($dir.'/'.$f) ) {  #$dir davor!!
                                      
                  echo "durchsuche Unterverzeichnis $f<br>";
                                      
                  $result[$f] = readDirectory($dir.'/'.$f);
                                  }
                                  
                  #Datei mit Dateigroesse speichern
                                  
                  else {
                                      echo 
                  "speichere $f in result<br>"flush();
                                      
                  $result[$f] = filesize($dir.'/'.$f);
                                      
                  #echo '<pre>'; print_r($result); echo '</pre>';
                                  
                  }
                              } 
                  habs bei mir getestest, funzt einwandfrei. Die echo kannst Du dann später auskommentieren.
                  Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                  Kommentar


                  • #24
                    Genial!!!! Es wird wirklich alles angezeigt!!! Vielen vielen Dank...
                    nur eine Frage hätte ich doch noch: Kann man die Ordner als Links anzeigen lassen?? So das nur immer der oberste Ordner dasteht und man sich dann durchklicken kann???

                    P.S.: Wenn ich mal nach Münster komme, dann lad ich dich aufn Kaffee ein!!! Hast mir echt super doll geholfen!! Vielen vielen Dank!!

                    Kommentar


                    • #25
                      Original geschrieben von chrissie82

                      Ich habe das Verzeichnis mit den doppelten / in der Datenbank abgelegt... hatte irgendwo gelesen das man das so machen sollte... braucht man es denn nicht??
                      Das betrifft nur System - Pfade und auch nur mit Einschränkung, nicht aber - äh - öffentliche Pfade wie in Webseiten, die ja - mit eventuellen Ausnahmen - öffentlich sind.
                      System - das meint Software, mit der nur Server - Betreiber zu tun haben, nicht aber die Domain - Benutzer (es sei denn, sie führten Scripts aus, die ihre Pfade bis ins System hinauf reichen lassen müssen).
                      Öffentlich ist alles, das sich unterhalb des Servers WWW - Verzeichnisses befindet, das in Apache htdocs heißt.

                      Die Empfehlung zu doppelten und "verkehrt" herum stehenden slashes steht z. B. in Apache config files und gilt nur dann wenn Apache auf M$ Windows läuft weil M$ ebent die slashes in Pfadangaben analog zu M$ DOS nach rechts unten zeigt. Das erste slash stellt die Maskierung für das zweite slash dar. Es ist nur Zufall, daß das Maskierungszeichen ebenfalls ein slash ist, es könnte auch ein anderes Sonderzeichen oder eine Kette von Sonderzeichen sein.

                      M$ - Pfade sichtbar machen
                      Wer z. B. phpinfo.php auf einem Windows - Server aufruft, findet die System - Pfade (etwa "Path" aus der autoexec.bat) darin mit zwei nach rechts unten gerichteten slashes.

                      Ich habe seit Jahren solche Win - Server für Intranets laufen und - nur um zu sehen was passiert - die Pfade teilweise absichtlich entgegen o. a. Apache - Empfehlung angegeben - und das hat auch funktioniert. Da aber immer mehr Server auf Open Source - Software laufen, braucht man sich in Zukunft wohl noch kaum darum zu kümmern.

                      Man oder frau eachte PHP - Fehlermeldungen, darin sind die slashes nach rechts oben gerichtet - und passend dazu sollte man oder frau es ebent auch machen.
                      Alles ist schön was man in Liebe betrachtet
                      -
                      Humor is wennste trotzdem lachst

                      Kommentar


                      • #26
                        Illustration dazu
                        Angenommen, Apache wäre in einem M$ Windows - Verzeichnis
                        D:\server\
                        installiert und

                        der Betreiber hätte die voreingestellte Apache - Verzeichnis - Ordnung übernommen und

                        hätte im öffentlichen Verzeichnis htdocs ein user - Verzeichnis bi_ha für Bienchen Hartmann angelegt und

                        Bienchen Hartmann hätte eine Domain namens my_hobbies.de und

                        der Server - Betreiber legte für sie ein Unterverzeichnis m_h_de an und

                        Bienchen Hartmann würde darin ein Bild namens lebkuchen.jpg ablegen,
                        dann
                        wäre der System - Pfad dahin
                        [COLOR=darkblue]D:\\server\\apache\\htdocs\\bi_[/COLOR][COLOR=darkblue]ha\\m_h_de\\lebkuchen.jpg[/COLOR],
                        der für den Server - Betreiber in dessen M$ Win - Oberfläche (z. B. im Filemanager Explorer) so erscheint
                        [COLOR=darkblue]D:\server\apache\htdocs\bi_[/COLOR][COLOR=darkblue]ha\m_h_de\lebkuchen.jpg[/COLOR],
                        und
                        der öffentliche Pfad wäre
                        [COLOR=darkblue]http:/[/COLOR][COLOR=darkblue]/ww[/COLOR][COLOR=darkblue]w.my_hobbies[/COLOR][COLOR=darkblue].de/lebkuchen.jpg[/COLOR].
                        Alles ist schön was man in Liebe betrachtet
                        -
                        Humor is wennste trotzdem lachst

                        Kommentar


                        • #27
                          Original geschrieben von chrissie82
                          Kann man die Ordner als Links anzeigen lassen?? So das nur immer der oberste Ordner dasteht und man sich dann durchklicken kann???
                          Ja kann man, brauchst du nur folgende Zeile in die .htaccess-Datei zu schreiben:

                          Options +Indexes

                          Funktioniert allerdings nicht, wenn dein Provider oder allgemein die httpd.conf des Webservers dir dies nicht gestatten.

                          Kommentar


                          • #28
                            Original geschrieben von chrissie82


                            Kann man die Ordner als Links anzeigen lassen?


                            if ( is_dir($dir.'/'.$f) ) { #$dir davor!!
                            echo "durchsuche Unterverzeichnis $f<br>";


                            durchsuche Unterverzeichnis $f

                            gegen

                            durchsuche Unterverzeichnis
                            <a href=\"".$dir.'/'.$f.'/' target=\"Zielrahmen oder - fenster\">$f</a>

                            tauschen.
                            Achtung
                            Auch im href - Befehl muß analog zu "#$dir davor!!" der Pfad "$dir" zum Unterverzeichnis"$f" angegeben sein.
                            Alles ist schön was man in Liebe betrachtet
                            -
                            Humor is wennste trotzdem lachst

                            Kommentar


                            • #29
                              - aber wat machste wennde Dich in ein Unterverzeichnis reingeklickt hast - wie kommste da wieder raus (ohne Brausers Zurück - Batten oder javascript history back)?

                              Da guckste mal in das erste meiner beiden Scripts - da gibt es sowas wie "previous" dir, das zuletzt besuchte dir wird als klickbarer Verweis "parent directory" angeboten.
                              Alles ist schön was man in Liebe betrachtet
                              -
                              Humor is wennste trotzdem lachst

                              Kommentar


                              • #30
                                Hm....
                                hab das jetz alles probiert und so... aber bekomme es leider nich zum laufen... es kommen immer wieder "parse-errors"

                                kannst mir mal ein Beispiel posten, wie ich deinen Code genau in meinen einbinde??
                                Und das Bild, was im Unterverzeichnis liegt, muss sich beim anklicken öffnen... wie funktioniert das??

                                Kommentar

                                Lädt...
                                X