2010-09-14 6 views
0

Je voudrais déclencher un script pour mettre à jour certaines statistiques lorsqu'un utilisateur soumet un nouvel enregistrement, mais je ne veux pas que l'utilisateur doive attendre la fin du script avant d'être redirigé.Exécuter un script après un événement utilisateur, mais sans affecter le chargement de la page?

>-- Time --> 
         > redirect User -> User Does Stuff -> more stuff -> etc 
        /     
User Input -> Submit -> 
         \ 
         > updating stats in background -> Possibly still running 

Quelle est la meilleure façon de faire cela en PHP?

EDIT pour Fabrik

Les utilisateurs aimeraient voir une rétroaction immédiate reflétant l'ajout de leurs nouvelles données, mais ces nouvelles données ne vient que dans 2 ou 3 fois par jour, donc je pense un CRON par intervalles Le travail peut être une utilisation inutile des ressources du serveur et échouer à satisfaire leur besoin d'urgence. J'espère que cela t'aides!

Répondre

1

J'ai fait une recherche rapide Google pour php background process et la plupart des hits suggèrent d'utiliser soit exec ou shell_exec pour appeler le script que vous souhaitez exécuter en arrière-plan.

Editer: This article semble être le plus pertinent à votre question.

0

Tableau de Nice mais: (par exemple, est-il possible d'utiliser Cron ou nous avons besoin pour afficher les statistiques dès que possible)

  • Nous avons besoin d'en savoir plus sur vos besoins
  • Si vous pouvez utiliser Cron mis en place un petit intervalle (5 minutes), puis interroger la base de données pour les changements
  • Si vous ne pouvez pas utiliser cron essayer de construire votre site entièrement avec AJAX afin que vous puissiez exécuter des processus arrière-plan en toute sécurité
1

Si vous avez juste besoin d'un petit bout de code que je voudrais aller pour quelque chose comme ceci:

<?php 
if($new_record) { 
    exec("php /path/updateStats.php ".escapeshellarg($userid)." >/dev/null &"); 
    your_redirect_call_etc(); 
} 

rediriger le flux de sortie et le « & » conduira à l'appel exec en cours d'exécution, indépendamment du script.

Si vous avez besoin d'une solution plus grande/évolutive, vous pouvez rechercher quelque chose comme Gearman qui vous permettrait d'exécuter ces tâches d'arrière-plan sur un autre serveur facilement/contrôlé.

Questions connexes