PHP Timeouts workaround

Tach Community,

ich hab ein Problemchen.
Mein PHP4 Script verarbeitet eine Textdatei, die mitlerweile
recht gross ist.

Jetzt ist ja in der PHP.INI aus sicherheitsgruenden
der max execution timeout auf 60 sekunden gesetzt.

bei mir kann ich natuerlich an der ini feilen…
aber das script soll ueberall laufen.

wie mach ich das denn ? gibts in PHP4 threads?
oder … wie sag ich meinem script, dass es nur
40 sekunden laufen soll und dann unterbrechen und
dann sich erneut aufrufen und den rest abarbeiten…

meine idee war…
script laeuft 40 sekunden.
dann schreibt es die aktuell gelesene zeilennummer
in eine DB und macht einen refresh und setzt dort wieder auf.

gibts da noch elegantere loesungen?

merci

PixelKoenig

Hallo.

ich hab ein Problemchen.
Mein PHP4 Script verarbeitet eine Textdatei, die mitlerweile
recht gross ist.

Jetzt ist ja in der PHP.INI aus sicherheitsgruenden
der max execution timeout auf 60 sekunden gesetzt.

Also entweder die einzulesende Textdatei ist jenseits der 3stelligen MB Marke, dein Server langsamer als 100 MHz oder das Script ist schlecht programmiert (soll keine Beleidigung sein, ich kenne nur die Voraussetzungen nicht und mutmaße deshalb).

Wenn du etwas konkreter das Problem beschreiben könntest, vielleicht mit Code-Stellen bzw. Teile des Inhalts der einzulesenden Textdatei, könnte man das Problem mal genauer betrachten.

wie mach ich das denn ? gibts in PHP4 threads?

Ich würde erstmal einen anderen Lösungsweg suchen.

oder … wie sag ich meinem script, dass es nur
40 sekunden laufen soll und dann unterbrechen und
dann sich erneut aufrufen und den rest abarbeiten…
meine idee war…
script laeuft 40 sekunden.
dann schreibt es die aktuell gelesene zeilennummer
in eine DB und macht einen refresh und setzt dort wieder auf.

Ein Filestream kennt prinzipiell keine Zeilen, da die Zeilenschaltung auch nur ein Zeichen ist. Mit fseek() kann man nur auf einen offset springen, der in Zeichen vom Dateianfang gezählt wird.
Der Lösungsansatz ist aber sicher nur eine Notlösung, da dann das Script mehrfach gestartet werden muss.

gibts da noch elegantere loesungen?

Mich würde erstmal der Code interessieren, ich kann mir nicht so recht vorstellen, dass es nicht „in einem rutsch“ geht.

Gruß, Bernd

Hallo Pixel,

also ich arbeite oft mit textfiles jenseits der 1 gigabyte.
habe fürs einlesen aber für das reine einlesen noch nie länger als 30 sekunden gebraucht.

wie ist der file aufgebaut?
machst du mit dem file noch berechnungen oder sql einträge ?

du kennst die maximale ausführungszeit mit dem befehl
http://www.php.net/set_time_limit
zurücksetzen.

dies kann jedoch bei fehlern im script zu starken komplikationen führen.

Gruß
Phillip