phpbar.de logo

Mailinglisten-Archive

[php] Performanceprobleme beim Parsen einer Textdatei

[php] Performanceprobleme beim Parsen einer Textdatei

Raul Flores-Neumer raul.flores_(at)_vizarts.de
Tue, 12 Dec 2000 21:30:28 +0100


Hallo,
ich stehe vor einem Problem:
Ich muß in einer großen Textdatei (~2,2 MB, 20.000 Zeilen) mit PHP eine
Zeile finden und verändern. Jede Zeile beginnt mit einem eindeutigen
Passwort, welches es zu finden gilt, anschließend wird verglichen ob die
Zeile sich verändert hat, wenn ja, neu geschrieben, da sie leider länger ist
als die alte, wird der Rest der Datei dann vorher gesichert und anschließend
ebenfalls geschrieben. Es folgt der verwendete Code:

$fp = fopen($datei, "r+"))
$gefunden = 0;
// Filepointer direkt vor die korrespondierende Tresorzeile setzen
while(($buffer = fgets($fp, 4096)) && ($gefunden == 0)) {
    if(substr($buffer, 0, 8) == $pwd) {
        $alte_zeile = $buffer;
        $stelle = ftell($fp);
        $laenge = strlen($buffer);
        $stelle = $stelle - $laenge;
        fseek($fp, $stelle);
        $gefunden = 1;
    }   // if
}   // for
// Vergleich ob sich die Zeile geändert hat
if($alte_zeile != $neue_zeile) {
    // folgende Zeilen sichern
    $i = 0;
    while($buffer = fgets($fp, 4096)) {
        $cache[$i] = $buffer;
        $i++;
    }
    // Filepointer zurücksetzen
    fseek($fp, $stelle);
    // Tresorzeile in cache einfügen
    $cache[0] = $treffer_zeile;
    // Datei neu schreiben
    $anz_zeilen = count($cache);
    for($i=0; $i<$anz_zeilen; $i++) {
        fputs($fp, $cache[$i]);
    }
}
Das Skript läuft auf meinem Server und bei Strato perfekt, Dauer 0,4
Sekunden (mit microtime()) getestet.
Auf dem Server auf dem es aber laufen soll braucht es 20! Sekunden, auch
wenn die Grundlast des Servers gering ist (mitten in der Nacht).
Habe ich irgendeine Performance-Bremse eingebaut oder geht das nicht
schneller (das blöde System mit der Textdatei muß so bleiben, die
Verantwortlichen können sich so schnell nicht entscheiden, auf ne Datenbank
umzustellen, auf dem Server fliegen noch etliche solche Textdateibasierte
Konstruktionen rum.
Vielen Dank für eure Mühe
Raul



php::bar PHP Wiki   -   Listenarchive