ralphi: Anfängerfrage(n): delay oder Warteschleife unter PHP

Hi Leute,

wie kann ich unter PHP zwischen den Befehlen eine Verzögerung von z.B. 10 sec einbauen.
Unter VB6, würde ich einen Timer verwenden.

gleich noch eine Frage hinterher:
Meine Seite hat eine Schleife - ziemlich viele Durchläufe. Mein XAMPP Server (Apache) bringt nach 30 sec den fehler:

  • Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\meinprog.php on line 41 _

in welcher conf-datei, unter welchem keywort kann ich den timeout ändern?

und oder wie würdet ihr den code anders schreiben, dass es gar nicht so weit kommt? Mein Code:

while ($h<20) {
while ($min<60) {
// Seite holen
** Nach 30 Durchläufen und 30 sec die Felermeldung Zeile 41: **
Z41 --> $x0=file_get_contents("....") ;
// Seite zerlegen
$x1 = explode("Berech..." ,$x0);...
// InDB schreiben
mysql_query(sprintf('insert ....);
// in datei schreiben
$i = fwrite($datei, $datum . ";" . $zeit ..
$min++; };
$min=0;
echo $zeit;
$h++;};

LG aus Landshut
ralphi

  1. Hallo,

    max_execution_time

    ist ein Stichwort, was dier weiter hilft.

    schau u.a. auch mal hier

    http://php.net/manual/de/function.set-time-limit.php

    Gruß

    jobo

    1. hi jobo,

      Das hat prima geklappt, vielen dank für den tipp, hab einfach mal auf 500sec bei meinem localhost gestellt. mit 2 Durchläufen war ich durch.

      Zitat von php.net:
      Der Standard liegt bei 30 Sekunden, es sei denn max_execution_time wurde in php.ini gesetzt.

      Der externe server, für den ich den delay (für 'file_get_contents') angedacht hatte, hat ohne meckern mitgemacht.

      grüße ralphi

  2. Hello Ralphi,

    wie kann ich unter PHP zwischen den Befehlen eine Verzögerung von z.B. 10 sec einbauen.
    und oder wie würdet ihr den code anders schreiben, dass es gar nicht so weit kommt? Mein Code:

    while ($h<20) {
    while ($min<60) {
    // Seite holen
    ** Nach 30 Durchläufen und 30 sec die Felermeldung Zeile 41: **
    Z41 --> $x0=file_get_contents("....") ;
    // Seite zerlegen
    $x1 = explode("Berech..." ,$x0);...
    // InDB schreiben
    mysql_query(sprintf('insert ....);
    // in datei schreiben
    $i = fwrite($datei, $datum . ";" . $zeit ..
    $min++; };
    $min=0;
    echo $zeit;
    $h++;};

    Du weißt, das bei PHP-Standardeinstellungen das Script sowieso nur solange läuft, wie kein "Client Abort" stattfindet, also das Browserfenster geöffnet bleibt, in dem der Request ausgeführt wurde?

    Ich würde soetwas anders machen. Dazu musst Du Dir dann aber nicht nur ein einzelnes Script bauen, sondern ein kleines System aus mehreren Scripten.

    1.) Zuerst musst Du allerdings prüfen, ob Du auf deinem Webspace die Funktion exec()
        benutzen darfst.

    2.) Dann prüfst Du, ob Du damit einen PHP-Prozess starten kannst. Dazu muss PHP nämlich
        als cli vorhanden sein auf dem Server und für Dich erreichbar.

    Dann kannst Du damit nämlich einen PHP-Prozess in den Hintergrund stellen auf dem Server. Der benötigt dann keine Standardausgabe mehr, also auch keine Verbindung zu einem aktiven Client-Fenster.

    Wenn Du das mit der exec()-Funktion geprüft hast, dann melde Dich wieder.
    http://de.php.net/manual/en/function.exec.php

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Om nah hoo pez nyeetz, Tom!

      Du weißt, das bei PHP-Standardeinstellungen das Script sowieso nur solange läuft, wie kein "Client Abort" stattfindet, also das Browserfenster geöffnet bleibt, in dem der Request ausgeführt wurde?

      Das lässt sich für jedes einzelne Script auch ignorieren.

      Matthias

      --
      1/z ist kein Blatt Papier.

      1. Hello,

        Om nah hoo pez nyeetz, Tom!

        Du weißt, das bei PHP-Standardeinstellungen das Script sowieso nur solange läuft, wie kein "Client Abort" stattfindet, also das Browserfenster geöffnet bleibt, in dem der Request ausgeführt wurde?

        Das lässt sich für jedes einzelne Script auch ignorieren.

        Klar, das weiß ich ja. Ich habe es aber extra noch nicht erwähnt, da das schwere Folgen haben kann, die man auch erwähnen muss. Man kann sich so nämlich auch Zombies bauen, die entweder den normalen PHP-Interpreter des Webservers lahm legen oder aber im Hintergrund rumschmurgeln.

        Es gibt dann dazu noch mehr zu sagen!

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  3. Tach!

    wie kann ich unter PHP zwischen den Befehlen eine Verzögerung von z.B. 10 sec einbauen.

    Mit sleep().

    Meine Seite hat eine Schleife - ziemlich viele Durchläufe. Mein XAMPP Server (Apache) bringt nach 30 sec den fehler:

    • Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\meinprog.php on line 41 _

    Für max_execution_time wird nur die reine Script-Laufzeit gezählt. Wartezeiten auf andere Prozesse zählen nicht dazu. Das dürfte auch für sleep() gelten.

    dedlfix.

    1. Hi dedlfix,
      danke für die sleep() funktion. Auf den namen muss man erst mal kommen (nicht delay, time, wait,..) ;)

      was mein problem betraf, war jobos hinweis nicht schlecht. dacht der externe server macht nicht mit (zu vielen Anfragen in zu kurzer Zeit oder so)

      grüße ralphi