Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Verzeichnis / Dateien rekursiv durchsuchen

  1. #1
    Registrierter Benutzer
    Registriert seit
    26.06.2003
    Ort
    Ooooala
    Beiträge
    20

    Verzeichnis / Dateien rekursiv durchsuchen

    Hallo,

    ich habe ein Wurzelverzeichnis, von dem ausgehend ich alle darin enthaltenen Textdateien nach einem bestimmten Begriff durchsuchen möchte.

    Verzeichnisstruktur:
    /Wurzelverzeichnis
    /Wurzelverzeichnis/textdatei1.txt
    /Wurzelverzeichnis/textdatei2.txt
    /Wurzelverzeichnis/Ordner1/
    /Wurzelverzeichnis/Ordner1/textdatei3.txt
    /Wurzelverzeichnis/Ordner1/textdatei4.txt
    /Wurzelverzeichnis/Ordner2/textdatei5.txt
    /Wurzelverzeichnis/Ordner2/textdatei6.txt

    Die Textdateien sollen per PHP nach einem bestimmten Begriff durchsucht werden und anschliessend soll die Datei mit dem Pfadnamen ausgegeben werden, die den Begriff enthält.

    Ich habe nun jeweils PHP-Codeschnipsel gefunden, die das unabhängig voneinander tun, aber ich bekomme es nicht in eines zusammen.

    Codeschnipsel für rekursive Anzeige von Dateien in einer Ordnerstruktur:
    Code:
    <?php
    
    // Sample function to recursively return all files within a directory.
    // http://www.pgregg.com/projects/php/code/recursive_readdir.phps
    
    Function listdir($start_dir='./Wurzelverzeichnis') {
    
      $files = array();
      if (is_dir($start_dir)) 
      {
        $fh = opendir($start_dir);
        while (($file = readdir($fh)) !== false) 
        {
          # loop through the files, skipping . and .., and recursing if necessary
          if (strcmp($file, '.')==0 || strcmp($file, '..')==0) continue;
          $filepath = $start_dir . '/' . $file;
          if ( is_dir($filepath) )
            $files = array_merge($files, listdir($filepath));
          else
            array_push($files, $filepath);
        }
        closedir($fh);
      } 
      else 
      {
        # false if the function was called with an invalid non-directory argument
        $files = false;
      }
    
      return $files;
    
    }
    
    $files = listdir('./Wurzelverzeichnis');
    print_r($files);
    ?>
    Mit einem anderen Codeschnipsel kann ich die Dateien nach einem bestimmten String durchsuchen:

    Code:
    <?php
    $a = "test";
    $directory = "./Wurzelverzeichnis/"; 
    $handle = opendir($directory); 
    
    while ($file = readdir ($handle)) 
    {
        $file = $directory.$file;
        if (!is_file($file)) continue;
        $fd = fopen($file,"r");
        $seite = fread ($fd, filesize ($file));
        $seite = strtolower($seite);
        fclose ($fd);
    
        if (strstr($seite,$a)) 
        {
            print($file);
        }
    }
    ?>
    Wie bekomme ich das denn jetzt so zusammengebacken, dass die Textdateien des Wurzelverzeichnisses rekursiv nach einem bestimmten Begriff durchsucht werden? Oder gibt es eine ganz andere Idee? Nach 3 Stunden Basteln verliere ich langsam den Überblick...

    Grüsse
    schuelsche

  2. #2
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    zb so:
    PHP-Code:
    <?php
    Function find_string($files$string) {
    foreach(
    $files as $file) {
        
    $fd fopen($file,"r");
        
    $seite fread ($fdfilesize ($file));
        
    $seite strtolower($seite);
        
    fclose ($fd);

        if (
    strstr($seite,$string)) 
        {
            print(
    $file);
        }
    }

    $files listdir("./Wurzelverzeichnis");
    find_string($files"foo");
    ?>
    Habs nicht getestet und ist auch schon ne Weile her, dass ich das letze Mal ernsthaft was mit PHP gemacht hab.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

  3. #3
    Registrierter Benutzer
    Registriert seit
    26.06.2003
    Ort
    Ooooala
    Beiträge
    20
    Vielen Dank, das könnte die Lösung sein.

    Nach ein bisschen testen glaube ich jedoch, dass auf diese Art nur das erste File angezeigt wird, in dem ein bestimmter Begriff vorhanden ist. Kann man das noch so umschreiben, dass er die Schleife so oft durchläuft, bis er keinen Begriff mehr findet... vielleicht doch irgendwie mit der while-Schleife? Denn ein Begriff kommt unter Umständen in mehreren Dokumenten vor und ich will alle anzeigen lassen.

    Grüsse
    schuelsche

  4. #4
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    foreach sollte eigentlich jedes Element (Dateiname) im Array $files einmal in die Variable $file schreiben und dann die entsprechende Datei öffnen und im Inhalt nach $string suchen.

    Hmm, ich sehe gerade, in meinem Code fehlt eine geschweifte Klammer:
    PHP-Code:
    <?php
    Function find_string($files$string) {
        foreach(
    $files as $file) {
            
    $fd fopen($file,"r");
            
    $seite fread ($fdfilesize ($file));
            
    $seite strtolower($seite);
            
    fclose ($fd);

            if (
    strstr($seite,$string))
            {
                print(
    $file);
            }
        }
    }

    $files listdir("./Wurzelverzeichnis");
    find_string($files"foo");
    ?>
    Vielleicht war das das Problem.
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •