tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Maniac
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
286
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    tluebke tluebke ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Beiträge
    56
    Ich möchte eine große txt-Datei (2000 kb, 101337 Zeilen!) per PHP-Script nach einem bestimmten String durchsuchen lassen und mir dann einen Teil der Zeile, in der der String steht, ausgeben lassen. Soweit klappt alles ganz gut, bis auf, dass das Script nach ca. 66904 Zeilen aufhört. Es tut so, als ob es komplett durchgelaufen wäre, da die nachkommenden Befehle ohne Probleme ausgeführt werden. Kann das an der Dateigröße liegen, die maximal geladen werden kann?
    Das Script läuft wie folgt:

    PHP-Code:
    $datei fopen("./cog-groups/cogs_all.txt""r");

    $funcgroup '[M]';
    $entf 'COG';
    $einf '';
    $i 0;
    while(!
    feof($datei)) {
      
    $zeile fgets($datei,1024);
      
      if(
    strstr($zeile,$funcgroup)!=NULL){

      
    $zeile_ex explode(" "$zeile);
      
    $cog1 $zeile_ex[1];
      echo 
    str_replace($entf,$einf,$cog1);
      echo 
    '<br>';
      
    $i++;
      } 

     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Also wenn es nicht am Timeout liegt, dann tippe ich eher darauf das nach ca. 66904 Zeilen ein Zeichen kommst was PHP dazu bringt die Schleife abzubrechen!?

    PHP-Code:
    if(strstr($zeile,$funcgroup)!=NULL
    Sicher das es richtig ist auf NULL zu prüfen und nicht FALSE
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  3. #3
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Desweiteren ist es anstatt strstr() evtl. sinnvoller strpos() zu verwenden:

    Zitat Zitat von PHP Manual
    Hinweis:

    Wenn Sie nur herausfinden möchten, ob ein bestimmter needle innerhalb von haystack vorkommt, verwenden Sie stattdessen die schnellere und weniger speicherintensive Funktion strpos().
    Möglicherweise ist die Fehler-Anzeige auch deaktiviert:

    Code php:
    1
    2
    3
    
    // Schreib mich an den Anfang deines Scripts
    ini_set('display_errors', 1);
    error_reporting(E_ALL|E_STRICT);
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  4. #4
    tluebke tluebke ist offline Mitglied Silber
    Registriert seit
    Apr 2007
    Beiträge
    56
    Ich habe nun das Script optimiert. Den Befehl strstr() brauche ich nun nicht mehr, da ich direkt die Datenbank abfrage, deren Tabellenfelder ich direkt überprüfen kann.

    Soweit funktioniert alles auch gut. Wenn die Datenflut zu groß wird, kommt aber ein Timeout. Das liegt jedoch wohl an dern Srvereinstellungen vom Anbieter.
     

  5. #5
    Avatar von Maniac
    Maniac Maniac ist offline Mitglied Smaragd
    Registriert seit
    Apr 2007
    Ort
    Augsburg/Gersthofen (Bayern)
    Beiträge
    1.204
    schon
    PHP-Code:
    ini_set('max_execution_time'6000); 
    versucht?
    tluebke bedankt sich. 
    Die Schweine von heute sind unsere Schnitzel von morgen!

  6. #6
    Kyôya Kyôya ist offline Mitglied Silber
    Registriert seit
    Nov 2011
    Ort
    Würzburg
    Beiträge
    62
    Zitat Zitat von tluebke Beitrag anzeigen
    Soweit funktioniert alles auch gut. Wenn die Datenflut zu groß wird, kommt aber ein Timeout. Das liegt jedoch wohl an dern Srvereinstellungen vom Anbieter.
    Das kann auch ein Anzeichen eines schlechten Queries sein. Jage mal dein/e SELECT-Query/Queries durch EXPLAIN. Dieses sagt dir, ob er die gesamte Tabelle durchsuchen muss oder auf Indexe zugreifen kann. Indexe sind weitaus schneller, da MySQL sie im Arbeitsspeicher hält, wenn die nicht zu groß werden.
    Code :
    1
    
    EXPLAIN SELECT ... FROM ... WHERE ...
    Dokumentation zum EXPLAIN Statement

    Etwas detailreicher ist das Webinar zum Thema MySQL-Performance.

    Gruß Kyoya Stefan
     
    Oracle Certified MySQL 5 Professional Developer
    Zend Certified PHP 5.3 Engineer

    Vorträge, Webinare, etc im Mayflower - Blog

Ähnliche Themen

  1. Maximale Dateigröße bei Fileupload
    Von Masteric im Forum PHP
    Antworten: 5
    Letzter Beitrag: 14.09.08, 13:10
  2. phpMyAdmin Maximale Dateigröße vergrößern wie?
    Von EddieG im Forum Hosting & Webserver
    Antworten: 3
    Letzter Beitrag: 08.11.07, 17:22
  3. phpMyAdmin Maximale Dateigröße vergrößern wie?
    Von EddieG im Forum Linux & Unix
    Antworten: 2
    Letzter Beitrag: 08.11.07, 16:26
  4. Maximale Dateigröße
    Von Divi im Forum PHP
    Antworten: 3
    Letzter Beitrag: 19.11.06, 02:18
  5. maximale Dateigröße bei Upload
    Von maniteni im Forum PHP
    Antworten: 2
    Letzter Beitrag: 15.04.05, 11:12