"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

php header für "end-of-file"

herky 05.07.2010 - 12:12 1068 4 Thread rating
Posts

herky

natürlicher fressfeind
Avatar
Registered: Feb 2001
Location: im tiefen loch
Posts: 910
gibts eine Möglichkeit in php das ende der "Übertragung" zu kommunizieren aber das Script weiter laufen zu lassen um aufwändigere arbeiten nachher durch zu führen?

eine art footer *g* ? der sagt dass das document hier endet und der browser nicht weiter auf input warten braucht?


greets,

herky

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12069
Du kannst im PHP-Script einen Prozess, der die eigentliche Arbeit verrichtet, wegforken, und dann das Script beenden. Die exec()-Wrapper in PHP bringen sicher eine dafuer brauchbare Funktionalitaet mit.

herky

natürlicher fressfeind
Avatar
Registered: Feb 2001
Location: im tiefen loch
Posts: 910
coole idee - leider ist der inode server auf dem ich arbeite nicht bereit für pcntl_fork() ... und die werden wohl nicht ihre php cgi wegen mir neu compilen :D

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12069
Dann wuerde ich einen cronjob anlegen, der jede Minute in ein Verzeichnis schaut, dort Dateien nach einem bestimmten Namensschema aufgreift, und deren Inhalt ausfuehrt. (Wie du da Security einbaust, ist deine Sache - Moeglichkeiten gibt's viele.) Dein PHP-Script macht dann nichts Anderes mehr, als diese Dateien in das Job-Verzeichnis zu schreiben und sich zu beenden - und der Cronjob holt sie spaetestens 60 Sekunden spaeter ab, um sie auszufuehren.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Es gibt in PHP sowohl eine ini-direktive als auch eine Funktion welche im Prinzip genau das erreicht was du willst:
http://www.php.net/manual/en/misc.c...nore-user-abort
http://www.php.net/manual/en/functi...-user-abort.php

Das zeigt dann beim User natürlich keine fertig geladene Seite an, wenn du aber einen ob_flush();flush(); am ende machst hat das keinen echten Nachteil für den User.

Eine für den User noch weniger bemerkbare Methode ist es am Ende deines Scripts eine neue Connection zu einem *anderen* Script aufzubauen, welches dann die eigentlichen Aufgaben erledigt. Das vom User aufgerufene Script kann dann auch gleich die Connection wieder trennen - das 2. Script läuft weiter (dank ignore-user-abort())
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz