8
votes

PHP: Exécutez le script 5 minutes après le premier script exécuté

Je fais un site PHP, et j'aimerais avoir un script (lorsque vous cliquez sur un bouton) qui ajoute des informations à ma base de données MySQL (je peux faire cette pièce par moi-même) et il exécute un script 5 minutes plus tard. Peut-être que ce n'est pas difficile, mais c'est difficile pour Google de choses comme ça.


3 commentaires

Quel est le but de cette action déplacée dans le temps? Quelles informations sont ajoutées qui nécessite ce déplacement?


Je fais un jeu basé sur le navigateur et je le veux si quelqu'un veut construire un bâtiment, il faut * minutes, puis finit.


Ce commentaire aide beaucoup avec notre compréhension de ce que vous essayez d'atteindre et comment vous aider. Je suggérerais que beaucoup de réponses déjà données tentent d'atteindre quelque chose de très différent.


11 Réponses :


-3
votes

cherchez-vous cela?

Sleep php.net


3 commentaires

dormir bloquera; L'OP ne l'a pas mentionné explicitement, mais cela ressemble plus à une question pour une solution non bloquante.


Pas vraiment, je veux qu'il exécute un autre script. PAR EXEMPLE. Le bouton appelle processus.php et process.php doit exécuter d'autres.php 5 minutes plus tard.


Un peu d'imagination ... bien sûr que vous ne pouvez pas faire cela dans le même script de la page Web. Mais vous pouvez appeler à partir du scriptofwebbrowser.php à un autre script actionafter5minutes.php dans le serveur exécutant l'arrière-plan avec la fonction de veille afin que vous n'ayez pas besoin de cron ni de problème et ce n'est pas un problème pour l'utilisateur ...



6
votes

Le sommeil est une très mauvaise idée. Le navigateur client devrait attendre 5 minutes pour terminer la demande !!!

À mon avis, il n'est pas possible de le faire comme si vous le souhaitez.

Vous devez créer un autre script qui interroge la base de données et vérifie s'il y a de nouvelles données (et sur la récupération réussie effectue le travail). Ce script doit être exécuté par cron toutes les n minutes.


0 commentaires

4
votes

Vous pouvez implémenter une file d'attente dans votre base de données, où vous ajoutez des "commandes" à exécuter et de stocker quand pour exécuter cette commande. Demandez ensuite un travail cron qui fonctionne chaque minute et vérifie ladite la file d'attente pour voir s'il est temps d'exécuter une certaine commande.


0 commentaires

6
votes

assez difficile. J'irais pour quelque chose comme ça:

  1. Votre script d'origine ajoute une enregistrement à la base de données, contenant son temps d'exécution,
  2. Un autre script contient l'action qui doit être prise 5 minutes plus tard - mais ne le lance que si l'enregistrement de la DB mentionné ci-dessus contient un horodatage d'au moins 5 minutes (espère que c'est assez clair, j'ai une difficulté, j'ai du mal à former cela)
  3. Set Crontab pour exécuter le deuxième script toutes les X minutes (peut-être 2).

    Ce ne sera pas 5 minutes exactement, mais plutôt quelque chose entre 5 et 7 (au cas où vous choisiriez de lancer le script toutes les 2 minutes). Cela ferait-il?


2 commentaires

Cela ressemble à une bonne idée, mais comment puis-je calculer si le temps de 1 des entrées était il y a 5 minutes?


Dans le premier script, vous mettez exécutation = () dans la base de données. Dans la seconde, vous recherchez exécution ou quelque chose de similaire. Il y a quelques façons de le faire, je pense.



0
votes

IMHO Le meilleur moyen est de: sur le bouton Cliquez sur Enregistrer le travail pour exécuter dans la DB avec l'heure à laquelle il doit exécuter. Écrivez un petit démon, récupère toutes les nouveaux travaux de 10/5/2 secondes qui doivent être exécutés et les exécutes.

Edit: BTW L'idée utilisant Cron pour rechercher de nouveaux travaux à exécuter, c'est mieux, mais uniquement si vous avez un petit site Web et que vous n'avez pas besoin de faire un équilibre de chargement pour les travaux.


0 commentaires

0
votes

La façon dont je ferais cela est de faire fonctionner un travail de cron entre les deux scripts.

  1. Le premier script définit une valeur dans une table de base de données.
  2. Le travail cron exécute le deuxième script. chaque minute ou quoi non.
  3. Le deuxième script vérifie la valeur de la base de données définie par Script 1 pour décider de fonctionner de manière entièrement ou non.

0 commentaires

0
votes

Vous pouvez forcer le processus et dans la fourche-enfant, faites une sommeil pendant 5 minutes avant d'exécuter votre deuxième script. J'ai testé cela et il apparaît que le processus enfant sera toujours exécuté même après la fin du parent. Quelque chose comme xxx

le "retour;" est important car le reste du script exécutera une 2e fois (c'est-à-dire à l'enfant) à moins que ce ne soit là.


0 commentaires

0
votes

Je suggérerais de faire la minuterie en JavaScript plutôt que PHP.

Mettez un horodatage dans la D $ _Session de l'utilisateur pour indiquer quand ils ont démarré l'événement, puis appellez JavaScript sur le navigateur après cinq minutes.

PHP aurait toujours besoin de connaître l'heure de début (pour empêcher l'utilisateur de pirater le jeu en modifiant le time-out JavaScript), mais il n'aurait pas besoin de faire du timing de compte ou de dormir ou de dormir. lui-même.


0 commentaires

4
votes

Si vous êtes sur une boîte Unix:

exec("echo 'php script.php' | at now +5 minutes");


1 commentaires

Cela devient plutôt malveillant avec beaucoup d'utilisateurs, cependant.



1
votes

Je fais un jeu basé sur le navigateur et je le veux si quelqu'un veut construire un bâtiment, il faut * minutes, puis se termine.

Considérant que c'est votre objectif réel, je recommande de sauver l'épargnant le bâtiment d'origine avec un horodatage.

Je sais que vous avez étiqueté votre question avec PHP, mais je ne veux pas inclure tous les frais généraux de la manipulation Les requêtes MySQL en PHP, surtout que je ne sais pas comment vous préférez exécuter les requêtes ou dans quel cadre vous poursuivez, voici donc un pseudocode pour gérer cette tâche «bâtiments de construction»:

build.php xxx

my_buildings.php xxx

espère que cela aide cela aide !


2 commentaires

C'est un grand morceau de code, exactement ce que j'essaie d'atteindre! La prochaine fois que je vais ajouter la chose que je veux réaliser dans le premier post. Merci!


Si vous l'aimez, n'hésitez pas à apporter un vote et / ou cliquez sur la case à gauche de cette réponse afin que d'autres à l'avenir puissent le trouver plus facilement!



0
votes

Quelqu'un a posé des questions sur le but de cela et votre réponse était la suivante: "Je fais un jeu basé sur le navigateur et je veux qu'il soit si quelqu'un veut construire un bâtiment, il faut * minutes, puis termine"

Vous n'avez pas vraiment besoin de temps une exécution pour cela. Vous pouvez tout faire en une seule fois en stockant BuildStartedat et en bâtiment dans le cadre du schéma de construction.

Maintenant peut-être que vous voulez que le bâtiment ait une belle animation lorsqu'il se termine, alors vous faites tout cela sur le frontend, mais assurez-vous que rien de significatif ne peut être fait avec le bâtiment si l'horodatage est avant le temps de fabrication de l'urgence afin de un vide tricheur par des pirates potentiels.


0 commentaires