Mario: User-Friendly Maximum execution time?

Hi,

ich habe ein PHP Script welches eine Socket Verbindung aufbaut. Dieses läuft normalerweise auch innerhalb kürzester Zeit ab. Wenn jedoch die Socket Verbindung hängt (wenn z.B. der Host nicht erreichbar ist) erhalte ich die Meldung:

Fatal error: Maximum execution time of 30 seconds exceeded in /pfad/datei.class.php on line 347

Soweit sogut. Gibt es aber eine Möglichkeit diesen Fehler vorher abzufangen und eine benutzerfreundliche Meldung anzuzeigen, dass der Server derzeit überlastet ist?

Danke und Gruß,
Mario

  1. Moin!

    Soweit sogut. Gibt es aber eine Möglichkeit diesen Fehler vorher abzufangen und eine benutzerfreundliche Meldung anzuzeigen, dass der Server derzeit überlastet ist?

    Ja.
    Fehler abfangen. Z.B:

    tudies('argumente') or die("sorry geht nicht!");

    oder
    tudies('argumente') or tujenes();

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. Hello,

    Bei Socketverbindungen gibt es zwei Timeouts.
    Die Wartezeit für den Öffnungsvorgang wird bei fsockopen mit übergeben
    Außerdem sollte man das Blocking ausschalten
    set_socket_blocking()

    das entspricht etwa dem LOCK_NB bei flock()

    Wenn die Ressource von anderen Prozessen gesperrt ist, würde der eigene Prozess sonst so lange Warten, bis sie wieder freigegeben wird und dann eventuell auch ins Timeout laufen.

    Man sollte ini_set('track_errors','1') benutzen und nach dem Öffnungsversuch auf Vorhandensein und Inhalt von $php_errormsg achten.

    Die zweite Zeit ist das Timeout für den Leseprozess. Die wird mit socket_set_timeout() eingestellt.

    Wenn fsockopen() fehlgeschlagen ist, wird false zurückgegeben, sonst ein Handle auf die Ressource.

    Wenn Du das Timeout selbst berücksichtigt, dann müsstest Du das Öffnen der Ressource in eine Schleife verlegen, die z.B. dreimal durchlaufen wird (zwischendurch usleep(8)), wenn es _nicht_ geklappt hat und durch break verlassen wird, wenn ein Handle beschafft werden konnte.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau