script timeout problem

Rios

Erfahrenes Mitglied
hi,

habe folgendes problem: hab ein script, das per cronjob aufgerufen werden soll und für alle angemeldete user wetterdaten von einer anderen seite holen soll (mit file+ diverse string manipulationen).
Das dauert zwischen 3 und 4 sekunden für jeden user, d.h. angenommen ich hab 100 user und ich mache das 100 mal in ner schleife mache, bin ich weit über das 30 sekunden time limit hinaus...

Die möglichkeit den timeout serverseitig hochzusetzen geht leider nicht, hat jemand von euch vielleicht ne idee wie ich das lösen könnte, die zahl der user die angemeldet sind, ist natürlich variabel.
 
Jupp,
wenn du je schleife etwa 3-4 sekunden brauchst, könntest du es mit

PHP:
set_time_limit (4)

bei jedem Schleifen durchgang laufen lassen. Die Funktion lässt das Script ab ausführen des Befehls angegebene Sekundenzahl weiterlaufen, beachte das für den weiteren Scruptablauf!
Funktioniert nicht im safemode!

Marco
 
äh versteh ich das jetzt richtig,
angenommen ich hab sowas

PHP:
for ($i=0; $i < 50; $i++)
{
code der ca 3-4 sekunden dauert
}

muss ich jetzt innerhalb der for schleife jedesmal die set timeout funktion aufrufen?
 
Es gibt mehrere Wege.

Entweder du machst es so:
PHP:
// zeit für deine bearbeitung
$zeitbedarf = $eintraege*4;
// Restzeit, die das script eventuell noch braucht + reserve
$zeitbedarf+=15;
set_time_limit($zeitbedarf);


So kannste das zu beginn des scripts machen (und nur einmal ausführen)

Oder:
PHP:
while($aktuell<=$eintraege)
 {
  set_time_linit(4);
 // hier machst du deine Bearbeitung;
 }

// nochmal zeit beanspruchen, für die restliche Ausführung des scripts:
set_time_limit(15);

Erste Variante ist sinnvoller denke ich.

Marco
 
aber ich glaub auf php.net gelesen zu haben, dass man mit der php set time limit funktion nicht das time limit des servers überschreiben kann, d.h. ich kann nicht über die 30 sekunden gehen
 
Nicht ganz.
Offzielle Beschreibung aus dem PHP-Handbuch:

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.

Wenn set_time_limit() aufgerufen wird, dann startet der Zähler neu. Das heisst, wenn die Standardeinstellung 30 Sekunden beträgt und nach 25 Sekunden durch ein Script ein Aufruf wie z.B. set_time_limit(20) erfolgt, darf das Script insgesamt 45 Sekunden laufen, bevor eine Fehlermeldung ausgegeben wird.

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.


Ergo, so lange PHP nicht im safemode läuft, funktioniert es :)
 
Zurück