Suche in Dateien die 15263x

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

  • #31
    Du musst nicht den Filename, sondern den Inhalt des Files an preg_match() übergeben. Also erst jeden Filename mittels file_get_contents() einlesen und erst dann den preg_match() drüber.

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #32
      ich bekomms einfach net hin
      hab schon rumprobiert manchmal zeigt er mir was an aber grade garnix mehr


      PHP-Code:
          if(!$_GET['s'])
              die();
          
          echo 
      "Treffer mit <b>".$_GET['s']."</b> :<br><br>";

      $documents = array();
      foreach (
      glob('*.html') as $document) {
         
      $documents[] = $document;
      }

      foreach (
      $documents as $document) {
      $content strip_tags(file_get_contents($document));
      }
      preg_match('/\b'.$_GET['s'].'\b/i',$document,$treffer);
      //Wenn Treffer 0 nicht empty ist
      if(!empty($teffer[0])){
      for(
      $i=0$i<10$i++) {
          
      //also haben wir einen Treffer
          
      echo "".$treffer[$i]."<br>";
          }
      }else{
         
      //haben wir keinen Treffer

      an dem probier ich grade rum. des dürfte doch so passen oder.ich les die dateinamne ein und such dann dort drinne.


      mfg

      Kommentar


      • #33
        die zweite foreach schleife ist nicht korrekt. überlege mal, was in $content drin steht, wenn diese terminiert.

        schau mal außerdem scharf hin, was du dem preg_match() übergibst. was davon ist der vorbereitete inhalt einer jeden datei?

        Kommentar


        • #34
          hallo penizillin,
          also in $content steht der dateiinhalt einer datei drinne aber wenn ich

          PHP-Code:
          preg_match('/\b'.$_GET['s'].'\b/i',$document,$treffer); 
          durch

          PHP-Code:
          preg_match('/\b'.$_GET['s'].'\b/i',$content,$treffer); 
          ersetze habe ich den gleichen fehler, er zeigt nix an !?


          mfg

          Kommentar


          • #35
            das liegt daran, dass die foreach-schleife immer noch nicht korrekt ist. warum glaubst du, dass sie auf einmal korrekt ist, wenn du sie nicht veränderst?

            Kommentar


            • #36
              hallo,
              ich steh grade total auf dem schlauch (ich weis angeber ) ich seh den fehler nicht
              mom mal ist das ";" falsch ?

              edit:
              ne das ";" kanns ja net sein

              Kommentar


              • #37
                PHP-Code:
                foreach ($documents as $document) {
                $content strip_tags(file_get_contents($document));
                }
                preg_match('/b'.$_GET['s'].'b/i',$document,$treffer); 
                Also mein Guter du liest IMMER NOCH den Dateinamen ein und versuchst in DIESEM zu suchen. Die foreach() liefert in $document der Pfad zum File und du baust diesen wieder in den RegExp ein OBWOHL du den Inhalt in $content hast. Ausserdem macht es absolut keinen Sinn den RegExp ausserhalb der Schleife zu haben. Sonst wird bestenfalls das letzte File durchsucht, aber sicher nicht alle.

                Noch Fragen dann

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #38
                  Original geschrieben von jahlives
                  PHP-Code:
                  foreach ($documents as $document) {
                  $content strip_tags(file_get_contents($document));
                  }
                  preg_match('/b'.$_GET['s'].'b/i',$document,$treffer); 
                  Also mein Guter du liest IMMER NOCH den Dateinamen ein und versuchst in DIESEM zu suchen. Die foreach() liefert in $document der Pfad zum File und du baust diesen wieder in den RegExp ein OBWOHL du den Inhalt in $content hast. Ausserdem macht es absolut keinen Sinn den RegExp ausserhalb der Schleife zu haben. Sonst wird bestenfalls das letzte File durchsucht, aber sicher nicht alle.

                  Noch Fragen dann

                  Gruss

                  tobi
                  Ich hab doch die manual gelesen sonst wüsste ich ja auch nicht für was die parameter genau sind. und ich hatte $document doch durch $content ersetzt, siehe weiter oben. ich habe nun auch den preg_match in die schleife mitgenommen,nur leider ohne ergebnis.

                  PHP-Code:
                  foreach ($documents as $document) {
                  $content strip_tags(file_get_contents($document));
                  preg_match('/\b'.$_GET['s'].'\b/i',$content,$treffer);


                  ich lese praktisch pro durchlauf jeden dateinamen ein und speicher ihn in $document, dieser wird dann an das array $documents übergebn. danach lese ich mit den dateiinhalt ein und speichere diesen in $content. im pregmatch sage ich ihm das parameter 1 das suchmuster ist, also nur nach dem eingegebenen wort suchen und groß/kleinschreibung ausser acht lassen. und in content sucht er dann nach diesem begriff. das array treffer wird nun mit den ergebnisse gefüllt. das stimmt doch so oder ?


                  mfg

                  Kommentar


                  • #39
                    ersetze habe ich den gleichen fehler, er zeigt nix an !?
                    Vllt ist's ja kein Fehler, sondern die Datei enthält den String nicht. Was steht denn bei der Suche in $_GET['s'] drinn ? Hast du mal den Inhalt von $content testweise gedumped (var_dump($content)) ? Ist das in etwa das was du erwartest ?
                    Ausserdem kannst du das kürzer schreiben
                    PHP-Code:
                    foreach (glob('*.html') as $document) {
                        
                    var_dump($document);
                       
                    $content strip_tags(file_get_contents($document));
                       
                    preg_match('/b'.$_GET['s'].'b/i',$content,$treffer);

                    Ergibt der obige Dump die Ausgabe des kompletten Pfades einer Datei ? Irgendwie beschleicht mich das Gefühl, dass dein glob() überhaupt nix zurückliefert.
                    Könntest ja testweise auch
                    PHP-Code:
                    var_dump(glob('*.html')); 
                    machen. Bin sehr sicher, dass dies ein leerer Array ist.
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #40
                      also das ist so:

                      in $_GET['s'] steht grade nur immer "test" drinnen ohne die " " da ich grade nur nach diesem string suche.

                      ich habe alle dateien im gleich verzeichnis.
                      dann habe ich die suche.php (dadrin ist der code mit dem ich die probs habe). zusätzlich sind im selben ordner 3 dateien:

                      hallo.html - diese enhält den text "hallo" (ohne " ")
                      test.html - diese enhält den text "test" (ohne " ")
                      test2.html - diese enhält den text "test" (ohne " ")

                      PHP-Code:
                      var_dump(glob('*.html')); 
                      ergibt:

                      array(3) { [0]=> string(10) "hallo.html" [1]=> string(9) "test.html" [2]=> string(10) "test2.html" } array(3) { [0]=> string(10) "hallo.html" [1]=> string(9) "test.html" [2]=> string(10) "test2.html" } array(3) { [0]=> string(10) "hallo.html" [1]=> string(9) "test.html" [2]=> string(10) "test2.html" }
                      PHP-Code:
                      var_dump($document); 
                      ergibt:

                      array(3) { [0]=> string(10) "hallo.html" [1]=> string(9) "test.html" [2]=> string(10) "test2.html" } array(3) { [0]=> string(10) "hallo.html" [1]=> string(9) "test.html" [2]=> string(10) "test2.html" } array(3) { [0]=> string(10) "hallo.html" [1]=> string(9) "test.html" [2]=> string(10) "test2.html" }
                      PHP-Code:
                      var_dump($content); 
                      ergibt:
                      string(5) "hallo" string(4) "test" string(4) "test"
                      also da steht schon was drinnen. ich habe die var_dump's immer innerhalb der foreach schleife gehabt.



                      mfg
                      Zuletzt geändert von dani1609; 07.12.2006, 12:45.

                      Kommentar


                      • #41
                        du scheinst es nicht systematisch angehen zu können.
                        so muss dein programm funktionieren:

                        Code:
                        anzulegen: array für treffer
                        
                        für jede datei (*.html) wiederhole 
                        {
                           ermittle inhalt der datei in variable $inhalt
                           durchsuche den inhalt mittels regexp.
                           wenn( etwas gefunden )
                           {
                              füge den inhalt und/oder den dateinamen in das array $treffer ein
                           }
                        }
                        
                        wenn ($treffer nicht leer)
                        {
                           gib ergebnisse aus $treffer aus
                        }
                        wenn du weiterhin planlos rumstocherst und nach jedem mißerfolg hier rumjammerst, erntest du in diesem forum nichts nettes.

                        Kommentar


                        • #42
                          Liefert denn der RegExp etwas zurück wenn du nur
                          PHP-Code:
                          preg_match('/'.$_GET['s'].'/i',$content,$treffer); 
                          schreibst ?
                          Da dein Fileinhalt nur test enthält wird ein PregMatch nicht greifen, solange er nach einer Wortgrenze sucht (\b). Da ist ja keine Wortgrenze. Wenn du den RegExp gleich belässt, dann solltest du im Quelltext vor und nach test ein Leerzeichen haben (dann funzt dat auch mit \b)

                          Gruss

                          tobi
                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar


                          • #43
                            hallo,

                            ich hab es jetzt geschafft das er mir was ausgibt. danke schonmal. nur bekomme ich es nicht hin das array treffer zu füllen.
                            ich habe es so und dann gibt er mir auch die ergebnisse aus:


                            PHP-Code:
                            foreach (glob('*.html') as $document
                            {
                            //var_dump(glob('*.html'));
                                //var_dump($document);
                               
                            $content strip_tags(file_get_contents($document));
                               if (
                            strpos('/b'.$_GET['s'].'b/i',$content,$treffer) !== false)
                               {
                               
                            //echo('<li><a href="'.$document.'" target="MAIN_FRAME">'.$document.'</a></li>'.PHP_EOL);
                               
                            }
                               
                            //var_dump($content);
                            }
                            //var_dump($content);

                            //Wenn Treffer 0 nicht empty ist
                            if(!empty($teffer[0])){
                            for(
                            $i=0$i<10$i++) {
                                
                            //also haben wir einen Treffer
                                
                            echo "".$treffer[$i]."<br>";
                                }
                            }else{
                               
                            //haben wir keinen Treffer


                            ich habe das echo nach strpos (das ich anstatt preg_match benutzt habe da das schneller ist) mal auskommentiert. wenn ich es nicht mache bekomme ich links zu den dateien in denen der begriff ist.
                            muss ich dann dieses treffer array noch füllen oder ist das unnütze ?
                            Ist es eigentlich möglich wenn ich nen link anklicke das er mir dann genau zu dem punkt in der datei springt indem der begriff vorkommt?also wie ne art anker punkt in html.


                            mfg
                            dani


                            €dit:
                            Ich hab nen Fehler entdeckt. solange nur test in den datein steht klappt es wunderbar. nur sobald zb test blabla drinen steht wird die datei nicht als treffer angezeigt. habt ihr da einen tipp?

                            Zuletzt geändert von dani1609; 07.12.2006, 13:23.

                            Kommentar


                            • #44
                              1. Du arbeitest immer noch mit Wortgrenzen. Obwohl du aller grösster Wahrscheinlichkeit nach keine im Quelltext hast.
                              2. das Array Treffer ist nur innerhalb der foreach-Schleife brauchbar. Weil es bei jedem Durchlauf wieder neu angelegt wird.
                              3. Eine Schleife brauchst du nicht um die Treffer auszulesen, ein einfaches
                              PHP-Code:
                              echo $treffer[1]; 
                              sollte reichen.
                              4. Du hast die Wortgrenzen schon so \b geschrieben ?

                              Gruss

                              tobi
                              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                              Kommentar


                              • #45
                                hi,

                                also ich hab die wortgrenzen mal rausgemacht obwohl ich dies zuvor eingehalten habe.

                                test.html enhält jetzt "test" (ohne " ")
                                und
                                test2.html enhält jetzt "das ist eine test datei" (ohne " ").

                                er zeigt mir aber nur die test.html als treffer an. obwohl ja in test2.html auch das wort treffer vorhanden ist. ich kann mir das nicht erklären.

                                das hier funktioniert bei mir. aber er liest hier ja nix aus einer datei, aber das funktioniert bei meinem script ja ähnlich.

                                bsp

                                mfg
                                dani


                                das script kurz.

                                PHP-Code:
                                foreach (glob('*.html') as $document
                                {
                                //var_dump(glob('*.html'));
                                    //var_dump($document);
                                   
                                $content strip_tags(file_get_contents($document));
                                   if (
                                strpos('/'.$_GET['s'].'/i',$content,$treffer) !== false)
                                   {
                                   
                                //echo('<li><a href="'.$document.'" target="MAIN_FRAME">'.$document.'</a></li>'.PHP_EOL);
                                   
                                }
                                   
                                //var_dump($content);

                                  //var_dump($content);
                                  
                                echo $treffer[1];
                                  echo 
                                $treffer[2];

                                Kommentar

                                Lädt...
                                X