2009-09-15 8 views

Antwort

5

Sie können register_shutdown_function verwenden, um eine Funktion zu registrieren, die am Ende der Skriptausführung aufgerufen wird. Sie können damit feststellen, wann das Skript beendet wurde und bestimmte Aktionen ausführen.

+0

Beachten Sie, dass der Herunterfahr-Callback nur aufgerufen wird, wenn die Skriptausführung abgeschlossen ist. Wenn der Benutzer die Verbindung abbricht, wird dies nicht aufgerufen. –

8

exit()/die() stoppt ein PHP-Skript.

Um zu wissen, wann das Skript zu stoppen ist, müssen Sie nur microtime als Timer verwenden und als Konstante (oder aus der php.ini-Datei abrufen) die maximale Ausführungszeit speichern. Sie können auch die Connection handling Information ansehen. Wo haben wir Dinge wie connection_aborted() und connection_status()

Aber was ist das Problem, das Sie versuchen zu lösen?

1

Nun, Sie könnten eine $start=microtime(true) starten, die einen Zeitstempel zurückgibt. Dann können Sie einfach weiter microtime(true) überprüfen und subtrahieren das von Ihrer Startzeit, um die Anzahl der Sekunden seit der Ausführung zu erhalten.

Aber nein, Sie können das Skript nicht "fangen", da es wegen der zu langen Anfrage endet. Sie könnten versuchen, einige Last-Minute-Sachen im Shutdown-Handler zu machen, aber ich bin mir nicht sicher, ob PHP das honoriert.

Es sieht so aus, als wäre dort eine Funktion, die genau das tut, was Sie wollen, connection_timeout(), aber es wurde veraltet und entfernt. Ich weiß nicht, ob es dafür irgendeine Art von Ersatz gibt.

2

Vielleicht möchten Sie einen Blick auf pcntl-alarm werfen, die es einem Skript ermöglicht, ein Signal an sich selbst zu senden. Enthält auch einige Beispiele, wie die Kill-Signale abgefangen werden können, die vom Betriebssystem gesendet werden können. Und tatsächlich sterben.

4

Um einen Rückruf zu erhalten, wenn Ihre Anfrage beendet wird, verwenden Sie register_shutdown_function(myfunction). Wie die meisten POSIX-Umgebungen unterstützt auch PHP signal handlers. Sie können Ihren eigenen Handler für das Ereignis SIGTERM registrieren.

function my_abort_handler($signo) { 
    echo "Aborted"; 
} 

pcntl_signal(SIGTERM, "my_abort_handler"); 
Verwandte Themen