Suche in Dateien die 15263x

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

  • Suche in Dateien die 15263x

    Hallo,

    ich bin relativ neu auf dem gebiet von php. Ich würde mir gerne eine Suche in php programmieren, aber ich komm damit nicht so ganz zurecht. In google hab ich keine passenden Schnipsel gefunden (vllt falscher suchbegriff ) Naja und hier im Forum hab ich zwar nen paar anhalte gefunden aber keine passende Lösung für mich. mach da jetzt schon bissel länger rum aber weis nimmer so wirklich weiter deshalb dachte ich mir kann hier einer helfen. Es sollte so in etwa aussehen:

    ich habe zb 3 dateien (html). in diesen dateien steht jeweils viel text
    jetzt soll ich per php forumlar ein suchbegriff eingeben und php sucht mir dann raus in welchen der lokalen dateien dieses stichwort vorkommt und gibt mir dann die treffer aus als link. wenn ich dann auf einen link klicke soll die er die datei öffnen in dem begriff vorkam und sofort zu der stellen springen und evtl das wort markieren.
    Aber das soll jetzt nciht heissen ihr soltl mir das mal amchen sondern ich hätte gerne lösungsansätze und evtl links dazu oder so bzw ein tutorial.

    mfg
    dani

  • #2
    Wenn die Texte nur in den Dateien existieren und nicht in einer Datenbank abgelegt sind, dann würde ich spontan auf die preg_-Funktionen setzen.
    Also z.B. mit file_get_contents oder Konsorten die Texte in Strings laden und mit preg_match bzw. preg_match_all nach eventuellen Treffern suchen und bei Erfolg auswerten. Um per Link zur jeweiligen Datei zu gelangen und den Suchbegriff zu markieren, kannst du dann den bzw. die benötigten Parameter via $_GET an die jeweilige Datei übergeben. Das als kleiner Beispielansatz.
    Nieder mit der Camel Case-Konvention

    Kommentar


    • #3
      Das Form wirst du easy hinkriegen SelfHtml dann musst du anhand des Suchbegriffst die Dateien durchsuchen, wobei dir folgende Fkt helfen könnten
      Ganz allgemein findest du Infos im Manual und Tutorial zu RegExp bei der Suma deiner Wahl.

      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


      • #4
        Hallo

        also regex ist ja eigentlich nicht das was ich bruache oder ich komm grade bisschen durcheinander.

        Hier sind ein paar Anwendungsbeispiele wo man Regex gebrauchen könnte.

        1.

        Regex kann man zum Beispiel benutzen um ein Eingabefeld auf Gültigkeit zu prüfen. Dies macht man z.B. bei einer Eingabe einer Emailadresse oder Spielernamens.
        2.

        Manchmal möchte man aus einem fertigen String, z.B. von einer anderen Seite, bestimmte Informationen auslesen. Diese kann man dann in seinem Script weiter verarbeiten. Wenn möglich sollte man aber sscanf benutzen. Man sollte nicht immer die Regex-Engine anwerfen.
        3.

        Mit Regex kann man auch Teilstrings in einem String ersetzen lassen die man nicht ohne weiteres mit str_replace ersetzen lassen kann. Für Smilies braucht man z.B. kein Regex, die kann man einfach mit str_replace in die Bilder umwandeln.

        mein code ist bisher soweit

        PHP-Code:
        <h1>Suche in Dateien</h1>
        <form method="get">
        <p>
            <label>Suchen nach <input name="s" value="<?=htmlspecialchars($_GET['s'])?>"/></label>
            <br>
            <input type="submit" />
        </p>
        </form>
        <?php
            
        if(!$_GET['s'])
                die();    

        echo 
        "Treffer mit <b>".$_GET['s']."</b> :";

        ?>
        weiter bin ich noch nicht gekommen. jetzt habe ich es schonmal soweit das ich das suchwort in get[s] drin habe. aber wie verfahre ich weiter?
        müsste das in etwa so gehen oder ?


        PHP-Code:
        if((file_get_contents($datei), $_GET['s']) !== false)
        .... 


        €dit:

        also ich habs mal so bis jetzt und der gibt dann "1" aus also hat er das suchwort in der datei gefunden. nur müsste ich jetzt einen link zu der datei machen und das gesamte verzeichnis (also dessen dateien) sowie unterverzeichnisse durchsuchen.


        hier der neue code:

        PHP-Code:
        Suche in Dateien<br>
        <form method="get">
        <p>
            <label>Suchen nach <input name="s" value="<?=htmlspecialchars($_GET['s'])?>"/></label>
            <br>
            <input type="submit" />
        </p>
        </form>
        <?php
            
        if(!$_GET['s'])
                die();
            
            echo 
        "Treffer mit <b>".$_GET['s']."</b> :";

        if (
        file_get_contents("test.txt",$_GET['s']))
        echo 
        "1";

        ?>
        Zuletzt geändert von dani1609; 24.11.2006, 10:03.

        Kommentar


        • #5
          Nein. Mit deinem Ansatz bist du definitiv an jeder möglichen Lösung vorbei. Am besten schaust du dir mal die Funktionsbeschreibung von file_get_contents im Manual an, denn der zweite, optionale Paramter hat eine ganz andere Funktion, als du glaubst. Darüber hinaus sind reguläre Ausdrücke genau das, was du brauchst. Insofern würde ich mich nochmal mit der Materie befassen. Einen Lösungsansatz habe ich dir weiter oben ja schon gegeben.

          EDIT:

          Ich sehe gerade, dass ich mich verlesen habe, da du file_get_contents gar keinen zweiten Parameter übergibst...


          Original geschrieben von dani1609
          PHP-Code:
          if((file_get_contents($datei), $_GET['s']) !== false)
          .... 
          EDIT:

          Dieses Konstrukt macht für mich nur immernoch keinen Sinn.


          Zuletzt geändert von Griecherus; 24.11.2006, 10:04.
          Nieder mit der Camel Case-Konvention

          Kommentar


          • #6
            ich habs ja jetzt anders. aber die funktion die ich benutzte speichert ja nur den dateinhalt in einem string. also muss ich diesen string dann durchsuchen oder und nicht die datei direkt?


            PHP-Code:
            Suche in Dateien<br>
            <form method="get">
            <p>
                <label>Suchen nach <input name="s" value="<?=htmlspecialchars($_GET['s'])?>"/></label>
                <br>
                <input type="submit" />
            </p>
            </form>
            <?php
                
            if(!$_GET['s'])
                    die();
                
                echo 
            "Treffer mit <b>".$_GET['s']."</b> :";

            if (
            file_get_contents("test.txt",$_GET['s']))
            echo 
            "1";

            ?>

            Kommentar


            • #7
              regex ist ja eigentlich nicht das was ich bruache oder ich komm grade bisschen durcheinander.
              Ich tippe auf zweiteres , weil RegExp das einzige ist, wie du das umsetzen kannst. Du willst ja, dass die Suchtreffer auf der Seite markiert werden (z.B. mit einem span und background-color) und das mein Guter geht nur mit RegExp. Aber verwende besser preg_replace() und nicht preg_match().
              preg_replace() sucht und ersetzt im gleichen.

              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


              • #8
                Ich glaube du hast meinen Beitrag nicht ganz gelesen... Schau mal bitte im PHP-Manual nach, welche Funktion der zweite Parameter von file_get_contents hat (in deinem Fall $_GET['s'])...

                Nochmal: Du lädst eine Datei mit file_get_contents in einen String und suchst mit preg_replace (@jahlives: danke für die Verbesserung ) nach deinem gewünschten Suchwort usw.
                Nieder mit der Camel Case-Konvention

                Kommentar


                • #9
                  also ich danke euch mal jungs.
                  das mit dem regex sprich markieren usw will ich erstmal weglassen wichtig ist das die suche jetzt mal funzt also man klickt auf den link und springt dann zu der stelle an der datei. kann mir jemand vllt bisschen auf die sprünge helfen ? ich raffs echt net.

                  // entfernen von Tags und einlesen in string
                  if (strip_tags(file_get_contents("test.txt",$_GET['s'])))

                  Kommentar


                  • #10
                    Sag mal, hast du meine letzten drei Beiträge überhaupt gelesen? Ich habe dich jetzt drei mal auf einen grundlegenden Fehler hingewiesen und du bist weder darauf eingegangen, noch hast du den Fehler verbessert. Mehr als versuchen dir zu helfen kann ich nicht...
                    Nieder mit der Camel Case-Konvention

                    Kommentar


                    • #11
                      woher hast du den Sch... dass file_get_contents() den Suchbegriff als Argument brauchen könnte. Lies das file ein und stelle mittels strpos() fest ob der Suchbegriff drinn vorkommt
                      PHP-Code:
                      $daten strip_tags(file_get_contents('datei.html'));
                      if(
                      strpos($daten,$_GET['s']) !== false){
                          
                      //Begriff wurde gefunden also einen Link drauf anlegen
                      }else{
                          
                      //Diese Datei enthält den Begriff nicht

                      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


                      • #12
                        @Griecherus

                        sorry ich hab des erst jetzt durch das beispiel von jahlives kapiert was du gemeint hast. ich stand irgendwie auffm schlauch ich weis auch net.

                        @jahlives
                        schonmal danke für das script. hast mir jetzt schon gut geholfen. den sch.... hab ich von irgendeiner seite aus google aber find sie nimmer.

                        ich habs jetzt grade so:

                        PHP-Code:
                        $daten strip_tags(file_get_contents('test.html'));
                        if(
                        strpos($daten,$_GET['s']) !== false){
                            
                        //Begriff wurde gefunden also einen Link drauf anlegen
                            
                        echo('<li><a href="test.html">bla</a></li>'.PHP_EOL);
                        }else{
                            
                        //Diese Datei enthält den Begriff nicht
                            
                        echo "-.-";
                        }

                        ?> 
                        nur sollte ich die datei ja nicht fest angeben, sondern er sollte ja suchen in dateien und wenn er einen treffer hat irgendwie den pfad auslesen von der datei und diesem beim link verwenden. Ich probier mal mit der funktion getPathName() bissel rum...

                        Kommentar


                        • #13
                          Prinzip: Du legst alle Dateien, die durchsucht werden sollen, in ein Array ab. Dieses durchläufst du dann mit foreach und wendest auf jede Datei deinen Code-Schnipsel an.

                          PHP-Code:

                          $documents 
                          = array(
                              
                          'document_1.html'
                              
                          'document_2.html',
                              
                          'document_3.html'
                          );

                          foreach (
                          $documents as $document) {
                              
                          // dein Codeschnipsel

                          Das wäre eine - grob dargestellte - Möglichkeit. Die Dokumente könnten z.B. auch dynamisch ins Array abgelegt werden, in dem du ein bestimmtes Verzeichnis ausliest... Aber das würde jetzt erstmal zu weit führen.
                          Nieder mit der Camel Case-Konvention

                          Kommentar


                          • #14
                            Des Griechen Lösung würde ich dir empfehlen

                            Gruss

                            tobi

                            p.s. wenn du Verzeichnisse auslesen willst dann schau dir glob() an
                            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


                            • #15
                              cool danke euch. also wenn ichs so amche klappt das schonmal aber ich will ja die verzeichnisse durchsuchen.
                              omg ich habs wieder verrissen

                              des mit dem foreach stimmt net so ganz. des prinziop kapier ich. ich lese die ganze dateinamen ein und speicher die in nem array und dann kann ich die ja mit der 2ten foreach verarbeiten. aber was mach ich wenn ich unterverzeichnisse hab, da greift ja glob dann nicht.

                              PHP-Code:
                              $documents = foreach (glob("*.html") as $filename);

                              foreach (
                              $documents as $document) {
                                  
                                  
                              $daten strip_tags(file_get_contents('test.html'));
                              if(
                              strpos($daten,$_GET['s']) !== false){
                                  
                              //Begriff wurde gefunden also einen Link drauf anlegen
                                  
                              echo('<li><a href="test.html">bla</a></li>'.PHP_EOL);
                              }else{
                                  
                              //Diese Datei enthält den Begriff nicht
                                  
                              echo "-.-";
                              }
                                  

                              Kommentar

                              Lädt...
                              X