Mein Script ist lahm wie eine Schnecke..

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

  • Mein Script ist lahm wie eine Schnecke..

    Hi,

    Hier mal der Scriptteil:
    PHP-Code:
     function key_to_file($key_trans) {
        
    // Zur Sicherheit: Leerzeichen am Anfang / Ende entfernen:
        
    $key_trans trim($key_trans);
        
    // Umlaute und "ß" ersetzen:
        
    $key_trans ereg_replace ("ä""ae"$key_trans);
        
    $key_trans ereg_replace ("ü""ue"$key_trans);
        
    $key_trans ereg_replace ("ö""oe"$key_trans);
        
    $key_trans ereg_replace ("ß""ss"$key_trans);
        
    // Restliche Sonderzeichen mit Leerzeichen ersetzen:
        
    $key_trans preg_replace('%[^a-z0-9]%siU',' ',$key_trans);
        
    // Leerzeichen mit "-" ersetzen:
        
    $key_trans preg_replace('%( ){1,}%','-',$key_trans);
        
    // nur Kleinbuchstaben:
        
    $key_trans strtolower($key_trans);
        return (
    $key_trans);

    PHP-Code:
        $handle fopen($pfad_ordner."staedte-gemeinden.txt"r);
        while (!
    feof($handle) || $filecheck != "existiert") {
            if (
    key_to_file(fgets($handle,1024)) == $endung) {
                
    $filecheck "existiert";
            }
        }
        
    fclose($handle); 
    Was passiert: Es wird eine Textdatei mit ca. 1000 Städenamen zeilenweise ausgelesen, der jeweils aktuelle Name wird mit key_to_file in eine url-taugliche Form gebracht und mit $endung Endung verglichen.

    Leider komm ich sowohl online als auch offline an die 30 ************. MSET. Kann ich da noch irgenwas stark verbessern, oder verlang ich einfach zu viel von den Script?

    Gruß
    Syco
    [COLOR=darkblue].: 1+1=23 :.[/COLOR]

  • #2
    wer hat dir denn ereg_replace empfohlen? direkt mal string-replace nehmen!

    Kommentar


    • #3
      Mein Performancevorschlag:
      Du liest die Datei nicht zeilenweise, sondern einmal komplett in eine Var.
      Dadurch sparst Du Dir dann die jeweilige Neupositionierung des Dateizeigers (hängt natürlich auch von der Größe der Datei ab, aber in Deinem Falle, scheint das OK zu sein).
      Dann "explodest" Du diese Var anhand des Zeilenumbruchs.

      Die verschiedenen ereg_replaces ersetzt Du (bis auf den mit der RegEX) durch ein str_replace, dem Du ja auch ein Array mit den zu ersetzenden Zeichen übergeben kannst:

      z.b.
      PHP-Code:
      function ersetze_umlaute($text)
      {
          
      $such=ARRAY("Ä","ä","Ö","ö","Ü","ü","ß"," ");
          
      $ersetzen=ARRAY("Ae","ae","Oe","oe","Ue","ue","ss","-");
          
      $text=str_replace($such,$ersetzen,$text);
          return 
      $text;

      Kommentar


      • #4
        jupp, implode(file()) war auch mein gedanke!

        Kommentar


        • #5
          implode?

          Ich dachte eher an file()
          Da hätte er dann automatisch schon ein Array, welches nach Zeilen getrennt ist - kann mittels count() die Größe ermitteln und dann seine Schleife basteln.

          Oder habe ich was übersehen?

          Kommentar


          • #6
            mein ich doch, denk dir das implode weg

            Kommentar


            • #7
              Alles klar.
              Welches implode eigentlich?
              Ich sehe gar kein implode().

              Kommentar


              • #8
                OffTopic:
                du hast damit angefangen!

                Kommentar


                • #9
                  OffTopic:
                  Stimmt ja gar nicht! Stimmt ja gar nicht!
                  Mama, Mama, der TobiaZ behauptet einfach ich wäre zuerst implodiert!
                  Abba datt stimmt garnich.


                  Back 2 topic:
                  @syco23 - hat Dir der Thread jetzt weitergeholfen?

                  Kommentar


                  • #10
                    Back 2 topic:
                    @syco23 - hat Dir der Thread jetzt weitergeholfen?
                    und wie - ich hab das ganze jetzt so gelöst, um mehrere "-" hintereinander zu vermeiden.
                    PHP-Code:
                    function key_to_file($key_trans) {
                        
                    // Alles Kleinbuchstaben und Leerzeichen am Anfang / Ende entfernen:
                        
                    $key_trans trim(strtolower($key_trans));
                        
                    // Umlaute ersetzen:
                        
                    $umlaute = ARRAY("ä","ö","ü");
                        
                    $ersetzen = ARRAY("ae","oe","ue");
                        
                    $key_trans str_replace($umlaute,$ersetzen,$key_trans);
                        
                    // Sonderzeichen mit LZ ersetzen:
                        
                    $key_trans preg_replace('%[^a-z0-9]%siU',' ',$key_trans);
                        
                    // Leerzeichen mit "-" ersetzen:
                        
                    $key_trans preg_replace('%( ){1,}%','-',$key_trans);
                        return (
                    $key_trans);

                    bin ganz zufrieden. Die Datei lese ich immer noch zeilenweise aus, aber trotzdem mach mein Uralt-Celeron mit zig anderen Anwendungen parallel keine Mucken. Online funzt es auch super.. ich hätte mir nie gedacht, dass ereg_replace sooooo lahmt .. 30 sec. vs. weniger als 1 sec. ist ja echt nicht schlecht..
                    [COLOR=darkblue].: 1+1=23 :.[/COLOR]

                    Kommentar


                    • #11
                      Prima, da hast Du ja schon einen gewaltigen Performancegewinn.

                      Du kannst aber noch die Leerzeichen mit in die str-replace-Funktion nehmen. Dann sparst Du wieder Rechenzeit und kannst den letzten preg-replace-Aufurf weglassen:

                      PHP-Code:
                          $umlaute = ARRAY("ä","ö","ü"," ");
                          
                      $ersetzen = ARRAY("ae","oe","ue",""); 

                      Kommentar


                      • #12
                        Nein, das ist schon ABsicht so. Ich will nämlich nie mehr als ein "-" hintereinander und das erreiche ich niht, wenn ich deinem Vorschlag folge.
                        [COLOR=darkblue].: 1+1=23 :.[/COLOR]

                        Kommentar


                        • #13
                          Achso.
                          Stimmt.
                          Dann habe ich nichts gesagt.

                          Kommentar

                          Lädt...
                          X