Ich mache eine PHP-Seite, und ich hätte gerne ein Skript (wenn Sie auf einen Knopf klicken), der meiner mysql-Datenbank einige Informationen hinzufügt (ich kann diesen Teil selbst machen) und führt ein Skript 5 Minuten lang aus später. Vielleicht ist es nicht schwer, aber es ist schwer, so etwas zu googeln, danke im Voraus.
Schlaf ist eine sehr schlechte Idee. Client-Browser müsste 5 Minuten warten, um die Anfrage zu beenden !!!
Meiner Meinung nach ist es nicht möglich, es so zu machen, wie Sie es wollen.
Sie sollten ein weiteres Skript erstellen, das die Datenbank abfragt und prüft, ob neue Daten vorhanden sind (und bei erfolgreichem Abruf den Job ausführt). Dieses Skript sollte alle n Minuten von cron ausgeführt werden.
Ziemlich schwierig. Ich würde für so etwas gehen:
Es wird nicht 5 Minuten GENAU sein, sondern etwas zwischen 5 und 7 (falls Sie das Skript alle 2 Minuten starten). Würde das tun?
Sie können eine Warteschlange in Ihrer Datenbank implementieren, in der Sie "auszuführende Befehle" hinzufügen und speichern, wenn diesen Befehl ausführt. Dann haben Sie einen Cron-Job, der jede Minute ausgeführt wird und überprüft die Warteschlange, um zu sehen, ob es Zeit ist, einen bestimmten Befehl auszuführen.
Wenn Sie auf einer Unix-Box sind:
%Vor% Was bedeutet, dass der Befehl php script.php
nach 5 Minuten ausgeführt wird.
Ich mache ein browserbasiertes Spiel und ich möchte es, wenn jemand ein Gebäude bauen will, dauert es * Minuten und endet dann.
In Anbetracht dessen ist Ihr tatsächliches Ziel, ich empfehle nur, das ursprüngliche Gebäude mit einem Zeitstempel zu speichern.
Ich weiß, dass Sie Ihre Frage mit PHP getaggt haben, aber ich möchte nicht den ganzen Aufwand für die Verarbeitung von MySQL-Abfragen in PHP einbeziehen, vor allem da ich nicht weiß, wie Sie die Abfragen ausführen möchten oder welches Framework Sie sind Klage, also hier ist ein Pseudocode, um diese Aufgabe "Gebäude bauen" zu bewältigen:
build.php
%Vor%my_buildings.php
%Vor%Hoffe, das hilft!
IMHO der beste Weg ist: Auf Knopfdruck speichern Sie den Job in der Datenbank laufen mit der Zeit, die es laufen sollte. Schreibe einen kleinen Daemon, holt alle 10/5/2 Sekunden neue Jobs, die ausgeführt werden sollen und führt sie aus.
BEARBEITEN: Übrigens ist die Idee, cron zu verwenden, um nach neuen Jobs zu suchen, besser, aber nur, wenn Sie eine kleine Website haben und Sie keinen Lastenausgleich für die Jobs durchführen müssen.
So würde ich einen Cron-Job zwischen den beiden Skripten ausführen.
Ich würde vorschlagen, den Timer in Javascript anstatt in PHP zu machen.
Geben Sie einen Zeitstempel in die $ _SESSION des Benutzers ein, um anzuzeigen, wann sie das Ereignis gestartet haben, und rufen Sie nach fünf Minuten einen JavaScript-Aufruf an den Browser zurück.
PHP müsste immer noch die Startzeit kennen (um zu verhindern, dass der Benutzer das Spiel hackt, indem er das Javascript-Zeitlimit verändert), aber es müsste eigentlich kein Countdown-Timing oder Sleeping oder Ähnliches machen sich selbst.
Sie können den Prozess forkieren und 5 Minuten lang in der untergeordneten Verzweigung schlafen, bevor Sie Ihr zweites Skript ausführen. Ich habe das getestet und es scheint, dass der Child-Prozess noch ausgeführt wird, auch nachdem der Elternteil fertig ist. Etwas wie
%Vor%Die "Rückkehr"; ist wichtig, da der Rest des Skripts ein zweites Mal (d. h. im Kind) ausgeführt wird, sofern es nicht dort ist.