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. P>
11 Réponses :
cherchez-vous cela? P>
dormir code> 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 ...
Le sommeil est une très mauvaise idée. Le navigateur client devrait attendre 5 minutes pour terminer la demande !!! P>
À mon avis, il n'est pas possible de le faire comme si vous le souhaitez. P>
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. P>
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 em> 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. P>
assez difficile. J'irais pour quelque chose comme ça: p>
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? P>
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 = () code> dans la base de données. Dans la seconde, vous recherchez
exécution
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. P>
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. P>
La façon dont je ferais cela est de faire fonctionner un travail de cron entre les deux scripts. P>
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 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à. P> P>
Je suggérerais de faire la minuterie en JavaScript plutôt que PHP. P>
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. P>
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. p>
Si vous êtes sur une boîte Unix:
exec("echo 'php script.php' | at now +5 minutes");
Cela devient plutôt malveillant avec beaucoup d'utilisateurs, cependant.
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. P>
Considérant que c'est votre objectif réel, je recommande de sauver l'épargnant le bâtiment d'origine avec un horodatage. P>
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»: p>
build.php strong> p> xxx pré> my_buildings.php strud> p>
xxx pré> espère que cela aide cela aide ! P> blockQuote>
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!
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" p>
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. P>
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. P>
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.