Aktionen zeitverzögert ausführen und dabei Schliessen des Browsers ignorieren

ShOrtYk

Mitglied
Nabend zusammen,

ich arbeite momentan an einem kleinen Skript, dass u.a. zeitverzögert Aktionen ausführen soll. Ich verdeutliche das am besten mal an einem kleinen Beispiel:

Benutzer Andreas loggt sich in den Benutzerbereich ein und möchte dort eine Aktion durchführen. Er gibt die Aktion in Auftrag und muss nun 10 Minuten o.ä. warten, bevor die Aktion ausgeführt wird. Im Benutzerbereich sollte nun eine Art Countdown laufen. Der Benutzer soll das Browserfenster schliessen können, ohne dass der Countdown stopt, oder die Aktion frühzeitig abgebrochen wird. Heisst, wenn sich Andreas nach 3 Stunden o.ä. einloggt soll er sehen, dass die Aktion ausgeführt wurden ist. Der Countdown müsste also quasi aufm Webspace weiterlaufen.

Wie kann man sowas umsetzen?
Geht das mit "normalem" Webspace oder benötigt man für sowas einen vServer/Server?
Gibts da gute Hilfe im I-net?
Bin gerne bereit zu lesen, nur weiss ich nicht nach was ich suchen soll ^^

Schonmal recht herzlichen Dank für jede Hilfe & schönes Wochenende
MfG
ShOrtYk (Markus)

PS: Sorry falls PHP die falsche Section sein sollte, aber ich weiss ich wonach ich suche, geschweige wozu es gehört ;)
 
Eine Möglichkeit wären CronJobs. Ich weiß allerdings nicht, ob man die direkt mit PHP anlegen kann oder einen CronJob haben muss, der in bestimmten (entsprechend kurzen) Intervallen prüft, ob Aktionen ausgeführt werden müssen.
Wenn die Aktionen keine Aussenwirkung haben, sondern Systemintern ablaufen, wäre auch möglich, bei den Seitenaufrufen, die von der Aktion betroffen sein könnten, zu prüfen, ob die Zeit um ist und dann die Aktion inklusive ihrer Folgen für die Zeit, die sie überfällig ist, durchzuführen.

Gruß hpvw
 
Danke für deine Antwort.

Ob Cronjobs so eine sinnvolle Lösung sind weiss ich nicht.
Ich bin da zwar nur schlecht informiert, aber frisst das nicht mächtig an der Performance, wenn theoretisch jede Sekunden geprüft werden muss, ob eine Aktion ausgeführt werden muss?

Was meinst du mit systemintern?

Diese Aktion die ich oben beschrieben habe, könnte zum Beispiel das Erscheinen eines Links im Benutzerbereich sein, der vorher nicht sichtbar war.

Und wie müsste das vom Prinzip her umgesetzt werden?

Ich hatte mir da auch schonmal Gedanken drüber gemacht.

Wenn man beispielsweise die Uhrzeit, zu der die Aktion vollendet ist, in einem DB-Eintrag abspeichert und dann beim Zugriff des Benutzers prüft, ob diese Uhrzeit bereits war.
Da kommt nur das Problem auf, dass wenn sich der Benutzer erst am nächsten Tag einloggt, die Prüfung evtl. fälschlicherweise negativ ausfallen könnte.

Heisst, dass Datum müsste mitgespeichert werden.
Gibt es da entsprechende Funktionen, die anhand einer Angabe im Format tt.mm.yyyy hh:mm o.ä. einen Vergleich mit der aktuellen Zeit+Datum ausführt und dann ein Ergebnis ermittelt, ob dieser Zeitpunkt bereits war, oder noch kommen wird?
 
Mit systemintern meine ich, dass die Aktion keine Auswirkungen außerhalb Deiner Seite hat. Es könnte ja zum Beispiel ein Aktienkauf sein, der zeitgenau bei der Bank angewiesen werden muss oder z.B. die automatisierte Teilnahme an einem Gewinnspiel, ein Gebot bei Ebay usw.

Die Idee, die Du zum Schluss schilderst halte ich bei Deinem Beispiel für richtig.
Du kannst das Feld in der Datenbank als DATETIME anlegen (yyyymmddhhmmss). Direkt im Query kannst Du dann mit dem Ergebnis der MySQL-Funktion NOW() vergleichen.

Gruß hpvw
 
Achso, ne an solche Dinge hatte ich gar nicht gedacht.
Das soll also schon systemintern bleiben.

Das scheint dann wohl momentan die beste Lösung zu sein, da ansonsten auch keine weiteren Vorschläge gekommen sind. Dann werde ich mich jetzt mal über die genauen Möglichkeiten mit DATETIME und now() informieren und das Thema hier als erledigt markieren.

Vielen Dank hpvw, du hast mir sehr geholfen :)
 
Zurück