PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : *.txt: Datei-Zeiger versetzen, ...


Thomas H.
29.06.2008, 16:21:26
Hi!

Ich habe ein Script das Textdateien mit durchschnittlich 60.000 Zeilen verarbeitet, der Server killt meinen Prozess manchmal aber schon vorzeitig wegen der langen Laufzeiten von mehreren Minuten, deshalb meine Idee:
ich möchte die Datei in 10.000 Zeilen-Blöcken verarbeiten lassen

...
while (!feof($handle)) {
...
if(round(($alreadyin_count+$count)/10000)==($alreadyin_count+$count)/10000) {
// gibt es ne Bessere Möglichkeit zu überprüfen, ob 10000 Zeilen abgearbeitet sind?
break;
Header("Location: ".$_SERVER['PHP_SELF']."?zeile=".($_GET[zeile]+10000));
exit();
}
}



Wie kann ich denn ganz oben beim Neustart den Zeiger auf die Zeile $_GET['zeile'] setzen?

Danke!

Opendix
30.06.2008, 00:36:03
http://ch2.php.net/manual/de/function.fseek.php

Thomas H.
30.06.2008, 02:34:50
php.net kenn ich auch, das bringt mir aber wenig!

Denn damit kann ich es an eine gewisse Byte-Zahl setzen, ich will aber eine gewisse Zeile!

Hat jemand ne Idee wie ich das machen kann ohne die ganze Datei einlesen zu müssen?

lg

Socrates
30.06.2008, 02:48:18
Und wo ist jetzt das Problem?

...

// Berechne Stelle in Byte
$byte = $_GET['line']*4096;

// springe zu Byte
fseek($fp, $byte);

MfG, Andy

Thomas H.
30.06.2008, 03:31:13
Ich kenn mich mit dem Zeugs leider ned, aus, aber es hat doch ned jede Zeile 4096 Byte, oder?

Der Dateiinhalt "\r\n\r\n\r\n" hat doch ned dreimalsoviel bytes wie "gdsfghdfgjfdhgfjdghjdfghfdg", oder???

lg

The Serious Sam
30.06.2008, 13:09:32
vllt hilft dir ja set_time_limit (http://de.php.net/set_time_limit)