php: laufzeit von funktionen begrenzen

derda

New Member
wie kann man die Laufzeit von Funktionen unter PHP begrenzen,
so dass entweder der Rückgabewert angenommen wird,
oder nach zB: 10sec. einfach "false" zurückgegeben wird?
set_time_limit scheint wohl hier nicht anwendbar.. oder?



danke.
 
Nein, time_limit hilft da nicht....

Aber warum merkst du dir die Zeit in der Funktion nicht?
 
wie kann man die Laufzeit von Funktionen unter PHP begrenzen,
Nur um es zu verstehen:
Du meinst mit "Funktionen" wirklich Aufrufe einer "function"?
Oder meinst Du die Gesamtlaufzeit des PHP-Scriptes? (Wohl eher nicht.)

Ersteres wäre mit Multi-Threading möglich (siehe pcntl_fork).
Der Parent fork sich und überwacht (mit pcntl_waitpid) den Child, welcher die Funktion aufruft und kann diesen ggf. beenden.

Mit den genannten Stichwörtern müsstest Du Lösungen bei Google finden.

huschi.
 
Wenn PHP als Modul läuft, wird das nicht klappen. Dann forkts dir den ganzen Apache...
Und unter Win schon gar nicht.
 
Last edited by a moderator:
Ja, es handelt sich um functions, nicht ganze Scripte,
wobei man auch die function in eine externe Datei auslagern könnte,
falls das hilft.

Es läuft unter Linux, mit Apache oder/und Nginx, kann doch eigentlich nicht so schwer sein.

Ich schau mal unter Multi-Threading nach, Danke.
 
Last edited by a moderator:
ich schau mal unter Multi-Threading nach, danke..
Genau, mach das!

Und die andere Alternative: Die betroffenen Funktionen so umbauen, dass sie das eigenständig können.

z.B. So:
PHP:
<?php
error_reporting(8191); // E_ALL und E_STRICT
ini_set('display_errors', TRUE); // evtl. hilfreich


function dauerlaufer($sekunden=10)
{
  $ende = time()+$sekunden;
  while(true)
  {
    if(time()>$ende) return false;
    // hier tuwas
    // ganz viel
    // oder besser gesagt, immer wieder
  }
  return true;
}
var_dump(dauerlaufer(2));

?>
 
Das funktioniert so leider auch nicht, da ja nur zu Beginn der Schleife die Zeit abgefragt wird:
PHP:
while(true)
{
if(time()>$ende) return false;

$var = xyz();
// -> das soll nicht länger als x sec laufen..
// falls doch, $var = false;.. zu if() kommt es ja dann nie..
}
 
Mannoo..
1. Habe ich keine Ahnung ob das Verfahren überhaupt bei dir greifen kann...... Dein Script ist ja geheim


2. Habe ich extra gesagt:
Die betroffenen Funktionen so umbauen, dass sie das eigenständig können.
Warum wohl....?
Und wenn du xyz() überwachen willst, dann mußt du es auch da drin einbauen! Und nicht irgendwie drumrum. Drumrum, oder von aussen geht SO ganz sicher nicht.
 
Was willst du damit eigentlich erreichen? Deadlocks erkennen? Wenn ja, wodurch können die auftreten?

Meiner Meinung nach schaffst du mit deinem Vorhaben einen Indeterminismus, da der Erfolg eines Funktionsaufrufs u.a. von dem Dispatch-Verhalten des Betriebssystems abhängt. Gibt es keine saubere Lösung mit den Möglichkeiten, die dir php als Programmiersprache bietet?
 
Back
Top