Maximale Skript-Laufzeit

Ruediger

Erfahrenes Mitglied
hallo zusammen,

ich habe einen netten hoster, dieser hoster hat nun eine beschränkung zur laufzeit der php skripte auf 10 CPU-Sekunden und 90 Sekunden maximaler Ausführungszeit eingerichtet.

Ich habe einen newsletterskript über php dort laufen wo circa 2000 Mails verschickt werden. Früher hat das tadellos funktioniert, die skripte liefen so circa 3 - 5 minuten während das browserfenster geöffnet war, sie werden also manuell gestartet. leider geht das jetzt nicht mehr und ich suche eine möglichkeit diese 90 sekunden zu umgehen.

hat jemand eine idee?

gruß
rue
 
Wenn's nicht anders geht, musst halt das ganze in mehrere Arbeitsschritte aufteilen... also z.B. in der Schleife, die die Mails verschickt, alle paar mal prüfen wie viel Zeit schon seit Scriptanfang vergangen ist. Wenn's einen bestimmten Schwellenwert übersteigt, die Stelle an der das Script grade ist irgendwie speichern (Sessionvariable, Datei, Cookie, Datenbank...), einen Link ausgeben ("Weiter...") und dann dafür sorgen, dass das Script nach einem Klick auf den Link wieder dort weiter macht, wo es aufgehört hat. Wenn du nicht immer auf weiter klicken willst, musst du halt mit einem Meta-Refresh o.ä. arbeiten...

Nur so eine Idee ;)
 

MTK

Mitglied
Hi,
vieleicht hilft dir das:
http://www.php.net/manual/de/function.set-time-limit.php

set_time_limit -- Setzt die maximale Ausführungszeit
Beschreibung
void set_time_limit ( int seconds)

Legt die Zeit in Sekunden fest, die ein Script laufen darf. Ist diese Zeit abgelaufen, wird ein Fehler zurückgegeben. Der Standard liegt bei 30 Sekunden, es sei denn, max_execution_time ist configuration file eingetragen. Bei einer Einstellung von 0 Sekunden ist die maximale Ausführungszeit nicht begrenzt.
[...]
Achtung: Wenn PHP im Safemode läuft, hat set_time_limit() keinen Effekt. Die einzige Möglichkeit, dies zu umgehen, ist den Safemode im configuration file auszuschalten.

MTK
 
set_time_limit() hab ich jetzt mal ausgeschlossen, da Hoster das nicht so gerne sehen, wenn man ihre Einstellungen übergeht bzw. gleich PHP im Safemode laufen lassen.

Die Laufzeit eines Scripts als Abbruchbedingung festzulegen ist ziemlich simpel. Bsp.:
PHP:
<?
$start_time = time();

[...]

while ([...]) {
   [...]
   $current_time = time();
   $run_time = $current_time - $start_time;
   if ($run_time > 30) break;
}

[...]

?>
(Das ganze lässt sich natürlich auch mit weniger Variablen und evtl. auch direkt im Schleifenkopf erledigen, aber ich hab's mal zum besseren Verständnis so ausführlich geschrieben.)
time() gibt die Anzahl der Sekunden zurück, die seit 01.01.1970 00:00:00 GMT vergangen sind. Somit kannst du aus der Zeit, die am Scriptbeginn in $start_time gespeichert wird, und der aktuellen Zeit leicht die Scriptlaufzeit auf eine Sekunde genau errechnen. Diese Genauigkeit sollte in dem Fall reichen.

HTH :)