PHP: Führen Sie das Skript 5 Minuten nach dem ersten Skript aus

8

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.

    
Nyohosud 23.01.2011, 15:01
quelle

10 Antworten

6

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.

    
Daimon 23.01.2011 15:09
quelle
5

Ziemlich schwierig. Ich würde für so etwas gehen:

  1. Ihr ursprüngliches Skript fügt der Datenbank einen Datensatz hinzu, der den Ausführungszeitpunkt
  2. enthält
  3. ein anderes Skript enthält die Aktion, die 5 Minuten später ausgeführt werden muss - aber startet es nur, wenn der oben erwähnte db-Datensatz einen Zeitstempel von mindestens 5 Minuten enthält (hoffe, das ist klar genug, ich habe Probleme, dies zu formulieren)
  4. setze crontab, um das zweite Skript alle X Minuten auszuführen (vielleicht 2).

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?

    
mingos 23.01.2011 15:10
quelle
4

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.

    
Stefan H Singer 23.01.2011 15:10
quelle
3

Wenn Sie auf einer Unix-Box sind:

%Vor%

Was bedeutet, dass der Befehl php script.php nach 5 Minuten ausgeführt wird.

    
Martin Wickman 23.01.2011 16:39
quelle
1
  

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!

    
Steven Xu 23.01.2011 17:59
quelle
0

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.

    
kalkin 23.01.2011 15:11
quelle
0

So würde ich einen Cron-Job zwischen den beiden Skripten ausführen.

  1. Das erste Skript legt einen Wert in einer Datenbanktabelle fest.
  2. Der Cron-Job führt das zweite Skript aus. jede Minute oder was nicht.
  3. Das zweite Skript prüft, ob der von Skript 1 festgelegte Datenbankwert entscheidet, ob er vollständig ausgeführt werden soll oder nicht.
dkinzer 23.01.2011 15:14
quelle
0

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.

    
Spudley 23.01.2011 16:38
quelle
0

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.

    
eclipse31 23.01.2011 16:22
quelle
-3

Suchst du das?

schlafen php.net

    
raultm 23.01.2011 15:07
quelle

Tags und Links