40000 Zeilen aus txt auslesen

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

  • 40000 Zeilen aus txt auslesen

    Hallo,
    ich hab mir ein Skript gebastelt, welches mir eine *.txt Datei ausliest und alle Zeilen der Reihe nach auflistet und noch geichzeitig durchnummereriert.

    Wie ihr euch jetzt denken könnt, ist das ganze Teil jetzt recht lahm geworden und braucht etwa 20 Sec. bis die Seite komplett ausgelesen ist.

    Zustzlich hab ich noch ne Suchfunktion, die ebenfalls alle Einträge der Datei durchsucht und die Treffer dann listet und ebenfalls nummerriert.

    Dadurch ist das Skript nun so langsam, dass ich öfter timeout Fehler bekomme (php.ini timeout steht bei 30 sec.).

    kann mir evtl. jemand helfen wie ich sowas schneller gestalten kann (also irgendwie alle Daten einfach in ein Array legen oder so welches ich dann gleichzeitig durchsuchen und komplett ausgeben kann oder so).

    Steh etwas auf dem Schlauch gerade, hab auch schon einies getestet, was aber alles nicht zufriedenstellend arbeitet.

    Hier mal der Link
    und noch der Code:
    PHP-Code:
    <?php
    #################################################################################
    //Wandeln des eingegebenen Suchwortes in die "suchfreundliche" Variante
    $suchwort=$_POST[suche];

    function 
    sonderzeichen($string)
    {
     
    $string strtolower($string);
     
    $string str_replace("ä""ae"$string);
     
    $string str_replace("ü""ue"$string);
     
    $string str_replace("ö""oe"$string);
     
    $string str_replace("ß""ss"$string);
     
    $string str_replace("´"""$string);
     
    $string preg_replace('/\s/'''$string);
     
    $string preg_replace('/\!/'''$string);
     
    $string preg_replace('/\-/'''$string);
     
    $string preg_replace('/\./'''$string);
     return 
    $string;
    }

    //$lines = file($datei);

    if(!empty($suchwort)){
    $len=strlen($suchwort);
    if(
    $len<=2){
    echo
    '<blockquote>Das Suchwort muss mindestes 3 Zeichen haben!<br><br>
     >> <a href="javascript:history.back()">zurück zur Sucheingabe</a> <<</blockquote>'
    ;
    exit;
    }

    $string=$suchwort;
    $suchwortsonderzeichen($string);

    ###############################################################################
    //Zähler für die Übersicht über die gefundenen Einträge

    $zahl="1";
            foreach(
    $lines as $line) {
            
    $arr2 explode("-",$line);
            
    $string=$arr2[0];
            
    $textsonderzeichen($string);
            if(
    strstr($text$suchwort)){
                
    $zahl++;
            }
        }
        
    $zahl=$zahl-1;
    #########################################################################
    //Ausgabe der gefundenen Einträge!!!
    //$zahl=$zahl-1;
    echo'<center>>><a href="#suche">zur Suche 
    springen</a><<</center><br><br><font color="#FFFFFF">
    Es wurden <font color="#FF0000" size="3">'
    .$zahl.'</font>
     
    Einträge gefunden, die den Begriff
    <font color="#FF0000" size="3">'
    .$suche.'</font> 
    enthalten!</font><br><br>'
    ;

    ###################################################################################
    //Die eigentliche Suche und anschliessende Ausgabe der Ergebnisse
    $i=1;
            foreach(
    $lines as $line) {
            
    $arr explode("-",$line);
            
    $string=$arr[0];
            
    $textsonderzeichen($string);
            if(
    strstr($text$suchwort)){
                echo 
    '<font color="#FFFFFF">#'.$i.'&nbsp;-&nbsp;'.$line.'</font><br>';
                
    $i++;
            }
        }
    }

    ########################################################################
    //Suchfeld
    echo'
    <a name="suche"></a><br>
    <form action="liste.php" method="post">
    <table border="0" cellpadding="0" cellspacing="5" bgcolor="#333333">
      <tr>
        <td><b><font color="#FFFFFF">Nach Interpreten suchen:</font></b></td>
      </tr>
      <tr>
        <td><input name="suche" type="text">&nbsp;&nbsp;<input 
    name="suchen" type="submit" value="suchen"></td>
      </tr>
    </table><br>
    </form>
    '
    ;

    ######################################################################################
    //Liste aller Einträge in der playlist.txt wird erstellt
    if($liste==ja){
    //$handle=fopen($datei, "r");
        
    $i 1;
            while(!empty(
    $array[$i])){

                echo
    '#&nbsp;'.$i.'<b>&nbsp;-&nbsp;</b>'.$array[$i].'<br>';
                
    $i++;
        }
    }
    ?>
    EDIT:
    by TobiaZ: Auch du kannst wohl deinen Code umbrechen!
    Zuletzt geändert von TobiaZ; 03.06.2005, 18:37.
    Wer brauch schon ne Signatur?

  • #2
    ansatz: du kannst schon beim auslesen die ergebnisse filtern.

    Ne Textdatei mit 40.000 einträgen ist wohl ohnehin etwas krass, oder meinst du nicht? hast du nicht die möglichkeit auf eine andere DB umzusteigen?

    Kommentar


    • #3
      Klar ich könnte schon vorher filtern, aber dann geht die Übersichtsliste verloren!
      Und genau das will ich ja vermeiden.

      Thema DB, daran hab ich auch schon gedacht, aber die txt in die DB einzulesen kann zum Problem werden bei 40000 Einträgen oder?
      Wer brauch schon ne Signatur?

      Kommentar


      • #4
        Klar ich könnte schon vorher filtern, aber dann geht die Übersichtsliste verloren!
        verstehe ich nicht? hab mir aber auch vertsändlicherweise nicht deinen ganzen code angesehen?

        Thema DB, daran hab ich auch schon gedacht, aber die txt in die DB einzulesen kann zum Problem werden bei 40000 Einträgen oder?
        Was ist das für ein schwachsinn? Wenn du der meinung bist, du könntest es dem user zumuten 40.000 einträge bei jedem aufruf(!) auszulesen, dann kannst du wohl locker mal eben 40.000 einträge auf eine andere db übertragen.

        Kommentar


        • #5
          Ok, das ist natürlich ein Argument!
          Bin auch schon dabei die Daten in ne DB zu schreiben, bin mal gespannt wie die das verkraftet!

          Aber nochmal zum Auslesen: Das soll eben eine übersichtsliste über die Titel eines Radiomoderators werden, und da ist es nötig, dass sich die Gäste alle Titel anschauen können, und über die Suchfunktion sollen sie zusätzlich die Möglichkeit haben, nach einem bestimmten Interpreten zu suchen!
          Wer brauch schon ne Signatur?

          Kommentar


          • #6
            Bin auch schon dabei die Daten in ne DB zu schreiben, bin mal gespannt wie die das verkraftet!
            Wenn deine Text-DB das verkraftet, wird eine mysql-DB das 10 mal verkraften! Glaub mir!

            Aber nochmal zum Auslesen: Das soll eben eine übersichtsliste über die Titel eines Radiomoderators werden, und da ist es nötig, dass sich die Gäste alle Titel anschauen können, und über die Suchfunktion sollen sie zusätzlich die Möglichkeit haben, nach einem bestimmten Interpreten zu suchen!
            Hört sich gut an, und jetzt?

            Kommentar


            • #7
              Ja,ja
              ich bau mir gerade die Datei ja so um, dass ich sie in eine DB einlesen kann.

              Dann komm ich schon klar damit!

              muss eben testen, wie schnell die DB dann die Ausgabe und die Suche ausführt!

              DANKE auf jeden Fall mal!
              Wer brauch schon ne Signatur?

              Kommentar

              Lädt...
              X