2009-12-12 10 views
1

J'ai un script PHP qui prend environ 10 minutes.Affichage du pourcentage de script PHP terminé

Je veux donner à l'utilisateur des commentaires sur le pourcentage d'achèvement et j'ai besoin de quelques idées sur la façon de le faire.

Mon idée est d'appeler la page php avec jquery et la commande $ .post.

Existe-t-il un moyen de renvoyer des informations du script PHP sans terminer le script? Par exemple, d'après ce que je sais maintenant, si je retourne la variable, le script PHP s'arrêtera de fonctionner.

Mon idée est de scinder le script en plusieurs fichiers PHP et de lancer le .post après chaque retour du précédent. Mais cela ne donnera pas encore une évaluation précise du temps restant, car chaque script aura une taille différente.

Des idées sur comment faire cela?

Merci!

Répondre

8

Vous pouvez echo et flush() sortie, mais c'est une solution sous-optimale et plutôt fragile.

Pour les opérations longues, il peut être judicieux de lancer le script en arrière-plan et de stocker/actualiser l'état du script dans l'emplacement partagé.

par exemple. vous pouvez lanuch script en utilisant fopen('http://… appel, proc_open processus PHP CLI ou même juste openg script de longue durée dans un .

Vous pouvez stocker l'état dans la base de données ou dans la mémoire partagée (en utilisant apc_store()). Cela permettra à l'utilisateur de vérifier l'état du script à tout moment (en actualisant la page ou en utilisant AJAX) et l'utilisateur ne perdra pas la trace du script si la connexion du navigateur arrive à expiration.

Il vous permet également d'éviter de démarrer deux fois le même script long.

+1

merci! Je n'ai pas pensé à ça. Je peux le faire mettre à jour la base de données, puis avoir une autre commande .post qui mettra automatiquement à jour la page avec le pourcentage actuel de la base de données .. permet de voir quelles autres idées les gens ont – krx

+0

Si vous lancez un script de 10 minutes en utilisant fopen() , ne sera-t-il pas tué bien avant la marque de 10 minutes? Il suffit de demander ... – MiseryIndex

+0

Les tâches PHP de longue durée doivent exécuter 'set_time_limit (0)' et 'ignore_user_abort (true)' pour éviter d'être tué, et peu importe si elles sont lancées par l'utilisateur ou via 'fopen ('http: // ...) '. – Kornel

Questions connexes