Ankündigung

Einklappen
Keine Ankündigung bisher.

TXT Dateien mit PHP Durchsuchen

Einklappen

Neue Werbung 2019

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

  • TXT Dateien mit PHP Durchsuchen

    Hallo habe folgendes Problem...

    Ich möchte gerne Mehrere TXT Dateien auf meinem Server
    nach bestimmte Texte & oder Zahlen durchsuchen.

    Wenn er das gefunden hat, sollte man die Gesamte TXT Datei nach erfolgreichem Fund anzeigen.

    Quasi ein Such Formular (Hier eingeben) Dann auf suchen klicken und bei erfolgreichen Fund die gesamte TXT Datei anzeigen.

    Ist das möglich und kann mir einer dabei helfen?

    Bin mitlerweile am Verzweifeln.

    Danke
    asncm


  • #2
    Willkommen im Forum!

    Damit Du hier nicht mit dem falschen Fuß einsteigst beherzige bitte diesen Thread.
    Wichtige Punkte:
    • Wir helfen gern, wenn Du Initiative zeigst. Macht mal ist nicht.
    • Bitte benutze die Code-Box-Buttons und poste relevanten Code.
    • Bitte stelle verständliche Fragen in ordentlicher Sprache. Sei prägnant!
    • Bitte verwende für spätere Leser einen Threadtitel, der das Problem kurz beschreibt
    • Bitte drängle nicht.
    • Bitte markiere abgeschlossene Themen über den "Erledigt"-Link oben links.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Hallo.

      Danke für den Hinweis.
      Dachte eben es würde etwas schneller gehen.

      Gut.
      Versuchen wir es mal mit meinem Code:
      PHP-Code:
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

      <html> 

      <head> 

      <title>Worte in Textdateien suchen</title> 

      </head> 

      <body> 

      <?php 



      function cmp($a$b) { 

       if (
      $a == $b) return 0

       return (
      $a $b)? : -1



       

       

      $datei_arr=array(); 

       

       

      function 
      dir_rekursiv($verzeichnis, &$arr){  

       

       
      //$datei_typ_arr=array(0 => ".txt", 1 => ".php", 2 => ".htm", 3 => ".html"); 

       
      $datei_typ_arr=array(=> ".txt"=> ".php"=> ".htm"=> ".html"); 

       
      $handle = @opendir($verzeichnis);  

       while (
      $datei =@readdir($handle)){  

        if (
      $datei != "." && $datei != ".." ){  

         if (
      is_dir($verzeichnis.$datei)){  

            
      dir_rekursiv($verzeichnis.$datei."/", &$arr); 

           }else{ 

       

                       

                       if(
      in_array($ext$datei_typ_arr)){ 

                        
      $arr[]=$verzeichnis.$datei

                       } 

                      }  

         } 

       }  

       @
      closedir($handle);  



       

      dir_rekursiv("/www/",$datei_arr); 

       


      usort ($datei_arr'cmp'); 

      ?> 

      <!--  

      Ein Formular zur Eingabe.  

      /--> 

      <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 

      <p>Datei ausw&auml;hlen <select name="seldatei" title="Datei ausw&auml;hlen"></p> 

      <option selected value=""> -- Datei ausw&auml;hlen -- </option> 

      <?php 

       

      foreach($datei_arr as $datei){ 

       echo 
      "<option value=\"$datei\">$datei</option>"



      ?> 

      <p></select></p> 

      <p>Suchbegriff(e) eingeben  <input type="text" name="suche" title="Geben sie einen oder mehrere Suchbegriff(e) ein"></p> 

      <p><input type="submit" name="cmd" value="Suchen" title="Absenden"></p> 

      </form> 

      <?php 



      ini_set
      ('error_reporting'E_ALL|E_STRICT); 

      ini_set('display_errors''On'); 



      function 
      findwort($wort,$textdatei){ 



       if(
      strlen(trim($textdatei))==0){ 

        
      $gef_zeilen_arr[]="Dateiname Fehlt !"

        return 
      $gef_zeilen_arr

       } 



       if(
      strlen(trim($wort))==0){ 

        
      $gef_zeilen_arr[]="Geben sie einen oder mehrere Suchbegriff(e) ein"

        return 
      $gef_zeilen_arr

       } 



      $limiter_arr=array(=> "+"=> ";"=> "|"=> "&"=> " "/* Auch Leerzeichen durch Komma ersetzen */=> "-"); 

      foreach(
      $limiter_arr as $limiter){ 

       
      $wort=str_replace($limiter","$wort); 





      $wort_arr=explode(",",trim($wort)); 



       
      $text_zeilen_arr=array(); 

       
      $f = @fopen($textdatei,"r"); 



       if(!
      $f){ 

        
      $gef_zeilen_arr[]="Datei: ".$textdatei

        
      $gef_zeilen_arr[]="Die Datei ".$textdatei." konnte nicht geöffnet werden"

          return 
      $gef_zeilen_arr

       } 

       while(
      $zeile=@fgets($f,160)){ 

        
      $text_zeilen_arr[]=$zeile

       } 

       @
      fclose($f); 



       
      $gef_zeilen_arr=array(); 

       
      $gef_zeilen_arr[]="Datei: ".$textdatei

       
      $i=0

       while(
      $i<count($text_zeilen_arr)){//while 1 

        
      $k=0

           

          while(
      $k<count($wort_arr)){//while 2 

         
      $pos = @strpos(strtolower($text_zeilen_arr[$i]),strtolower($wort_arr[$k])); 

            

           if(
      $pos === false){ 

             

              }else{ 

                        

                       
      $gef_zeilen_arr[]="Der Suchbegriff ".$wort_arr[$k]." wurde in Zeile ".($i+1)." an Position ".($pos+1)." gefunden ==> ".$text_zeilen_arr[$i]; 

                      } 

           
      $k++; 

          }
      //end while 2 

        
      $i++; 

       }
      //end while 1 

       

       
      if(count($gef_zeilen_arr)>1){ 

        return 
      $gef_zeilen_arr

       }else{ 

                    
      $gef_zeilen_arr[]="Der/die Suchbegriff(e) \"$wort\" wurde(n) nicht gefunden"

                   return 
      $gef_zeilen_arr

                   } 



       

      if(isset(
      $_POST['suche'])){ 

       
      $erg_arr=findwort($_POST['suche'],$_POST['seldatei']); 

       foreach(
      $erg_arr as $erg){ 

       

        echo 
      "<pre>".htmlspecialchars($erg)."</pre>"

       } 



      ?> 

      </body> 

      </html>
      Damit bekomme ich ein Suchformular.
      Sollte dann über Dropdown eine TXT Datei aussuchen...
      Da ist momentan mein Knackpunkt.
      Der Zeigt mir die TXT Datei nicht an.

      Weiss jemand woran das liegen könnte?
      .php & .txt Datei liegen im gleichen Ordner.

      Kommentar


      • #4
        PHP-Code:
        dir_rekursiv("/www/",$datei_arr); 
        Ich glaube nicht, dass es /www/ gibt (kann aber auch falsch liegen...).
        Code:
        <p></select></p>
        Ist nicht nur unsinn sondern auch ungültig.
        Code:
        <p>Datei ausw&auml;hlen <select name="seldatei" title="Datei ausw&auml;hlen"></p>
        Hier genauso.

        PHP-Code:
        if(in_array($ext$datei_typ_arr)){ 
        $ext gibt es garnicht.

        Edit:
        PHP-Code:
        function cmp($a$b) {  

         if (
        $a == $b) return 0;  

         return (
        $a $b)? : -1;  


        Ich glaube nicht, dass du einen eigenen Comparator schreiben musst wenn du simples kleiner-größer-gleich nutzt...
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        Kommentar


        • #5
          ErrorReport hochdrehen:
          PHP-Code:
          error_reporting ( -);
          ini_set 'display_errors'true ); 
          und sämtliche @ vor Funktionen entfernen!

          Das
          PHP-Code:
          <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
          gegen das tauschen:
          Code:
          <form action="" method="post">
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            Hi.

            Danke für eure schnellen Antworten.

            Sämtliche @ Funktionen wurden entfernt.
            ErrorReport wurde hochgedreht.

            Dieser Code:
            PHP-Code:
            <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
            getauscht mit:
            PHP-Code:
            <form action="" method="post"
            Pfad wurde angepasst:
            Aus:
            PHP-Code:
            dir_rekursiv("/www/",$datei_arr); 
            wurde:
            PHP-Code:
            dir_rekursiv("/var/www/web519/html/Website/TXT/",$datei_arr); 
            Formular läuft leider genauso wie vorher.
            Leider kann ich immer noch keine Datei auswählen....

            Vielleicht doch ändern, dass einfach Mit Suchbegriff alle Dateien im Ordner TXT
            durchsucht werden?

            Aber da verlassen mich meine Kenntnisse.

            Gruss.

            Kommentar


            • #7
              Zitat von asncm Beitrag anzeigen
              Vielleicht doch ändern, dass einfach Mit Suchbegriff alle Dateien im Ordner TXT
              durchsucht werden?
              Wenn du es schon ohne Suchbegriffe nicht schaffst, wie dann mit?
              Mach mal ein paar Debugausgaben in deiner dir_rekursiv und find heraus, wo genau das Problem auftritt.
              Zitat von nikosch
              Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

              Kommentar


              • #8
                Das Problem liegt nicht daran, das die Suchbegriffe nciht gehen, sondern, dass er mir nicht mal eine Datei anzeigt die ich auswählen kann.
                Das ist leider das Problem.

                Wenn ich den Pfad ändere, dann habe ich eine Fehlermeldung.
                liegt die suche.php mit der .txt in einem Ordner und der Pfad auch ist dorthin angepasst, keine Fehlermeldung.
                Aber die Datei wird nicht angezeigt.

                Ich bastel mal weiter.

                Wenn ich die Lösung habe, meld ich nochmal.

                Danke trotzdem @all !

                Kommentar


                • #9
                  Du setzt $ext in dir_rekursiv nicht.

                  Kommentar


                  • #10
                    Ich würde zum Auslesen eher auf die Iteratoren der SPL zurückgreifen.
                    Sind praktisch und erfüllen verhältnismäßig kurz und knapp die Anforderungen:
                    PHP-Code:
                    $aFileExtensions = array( 'txt''html''php' );

                    $itDirectoryIterator = new RecursiveDirectoryIterator'./das/verzeichnis/' );
                    $itIterator = new RecursiveIteratorIterator$itDirectoryIterator );

                    $aPossibleFiles array_filter(
                            
                    iterator_to_array$itIterator ),
                            function ( 
                    $item ) use ( $aFileExtensions ) {
                                return 
                    $item->isFile() && ( in_array(pathinfo($item->getFileName(), PATHINFO_EXTENSION), $aFileExtensions) );
                            }
                        );

                    var_dump$aPossibleFiles ); 
                    damit hast Du dann schonmal alle Dateien, die in Frage kommen.
                    Anzeigen mußt Du die dann in einer Schleife nach dem Schema:
                    PHP-Code:
                    $aOptions = array();

                    foreach ( 
                    $aPossibleFiles as $file ) {
                        
                        
                    $sValue $file->getPath() . '/' $file->getFileName();
                        
                    $aOptions[] = '<option value="' $sValue '">' $file->getFileName() . '</option>';

                    }

                    // ...

                    echo '<select name="possible_files">' implode$aOptions ) . '</select>'
                    Ein wenig anpassen für Dein Script wirst Du wohl noch müssen, aber mehr kriegste nicht...
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar


                    • #11
                      Danke.

                      Habe ein Dropdown mit den Dateien. Alles gut.
                      Da drüber nur Fehler meldungen...mehr nicht... schade...


                      Ich habe bei mir im Code jetzt mal das gemacht:

                      PHP-Code:
                      $datei_typ_arr=array(=> ".txt"=> ".php"=> ".htm"=> ".html"); 
                      beschränkt auf nur .txt:

                      PHP-Code:
                      $datei_typ_arr=array(=> ".txt"); 
                      geändert zu:
                      PHP-Code:
                      $datei_typ_arr=array(file(".txt")); 
                      [/PHP]

                      Auswahl der Dateien funktioniert jetzt....
                      Aber ich bekomme diese Fehlermeldung dadrüber....

                      PHP-Code:
                      Warningfile(.txt) [function.file]: failed to open streamNo such file or directory in /var/www/web519/html/Website/TXT/suche.php on line 41 
                      Line 41 = $datei_typ_arr=array(file(".txt"));

                      Gruss

                      Kommentar


                      • #12
                        Da drüber nur Fehler meldungen...mehr nicht... schade...
                        Ja, wat?!
                        Fehler, Notices, Warnings

                        Und btw., was soll das:
                        PHP-Code:
                        $datei_typ_arr=array(file(".txt")); 
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Thou shalt read my Beiträge.

                          Kommentar


                          • #14
                            Zitat von Arne Drews Beitrag anzeigen
                            Ich würde zum Auslesen eher auf die Iteratoren der SPL zurückgreifen.
                            Sind praktisch und erfüllen verhältnismäßig kurz und knapp die Anforderungen:
                            PHP-Code:
                            $aFileExtensions = array( 'txt''html''php' );

                            $itDirectoryIterator = new RecursiveDirectoryIterator'./das/verzeichnis/' );
                            $itIterator = new RecursiveIteratorIterator$itDirectoryIterator );

                            $aPossibleFiles array_filter(
                                    
                            iterator_to_array$itIterator ),
                                    function ( 
                            $item ) use ( $aFileExtensions ) {
                                        return 
                            $item->isFile() && ( in_array(pathinfo($item->getFileName(), PATHINFO_EXTENSION), $aFileExtensions) );
                                    }
                                ); 
                            Mit CallbackFilterIterator anstatt dem array_filter, iterator_to_array und pathinfo wäre der Iterator schöner.

                            PHP-Code:
                            $allowedFileExtensions = array('txt''html''php');
                            $recursiveDirectoryIterator = new RecursiveDirectoryIterator('/tmp'); 
                            $recursiveIteratorIterator = new RecursiveIteratorIterator($recursiveDirectoryIterator); 
                            $callbackFilterIterator = new CallbackFilterIterator($recursiveIteratorIterator, function($item) use($allowedFileExtensions) {
                                if(!
                            $item->isFile()) {
                                    return 
                            false;
                                }
                                if(!
                            in_array($item->getExtension(), $allowedFileExtensions)) {
                                    return 
                            false;
                                }
                                return 
                            true;
                            });

                            foreach(
                            $callbackFilterIterator as $item) {
                                
                            var_dump($item->getFileName());

                            Kommentar


                            • #15
                              Jo, hast recht, den hatte ich noch nie genutzt, wenn ich ehrlich bin.
                              Mir gefällt zwar das doppelte if und der Dreier-Return nicht, aber der CallbackFilterIterator an sich macht Sinn.

                              Ach guck... getExtension() hatte ich auch nicht drin, guter Tipp!
                              Competence-Center -> Enjoy the Informatrix
                              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                              Kommentar

                              Lädt...
                              X