2010-08-30 4 views
3

Si un utilisateur clique sur un bouton qui fera un ajax post-appel à un fichier php, puis quitte le site ou ferme la fenêtre, le fichier php fonctionnera-t-il complètement jusqu'à ce qu'il se termine?Faire un appel AJAX à un fichier php -> puis quitter le navigateur -> le fichier php fonctionnera-t-il encore complètement?

Je veux que le fichier télécharge des choses sur mon serveur et publie un tas d'informations dans une base de données mysql. Cela pourrait prendre une minute ou deux. Mais je veux que la tâche se termine complètement, peu importe ce que fait l'utilisateur.

Si le message/requête ajax est envoyé, le fichier sera-t-il complètement exécuté?

merci pour toute info.

Répondre

6

Cela devrait aider:

ignore_user_abort(true); 
set_time_limit(0);  // number of seconds (0 infinity) 

Vérifiez la documentation de ces deux fonctions pour plus de perspicacité. En général, vous ne devriez pas avoir de problème, tant que vous ne vous heurtez pas à la limite de temps. Cela devrait avoir toutes les informations dont vous avez besoin:

http://us3.php.net/manual/en/features.connection-handling.php

+3

Vous devez supprimer le 'set_time_limit (0),' que cela pourrait conduire à des processus suspendus pour toujours . OP déclare que le script ne devrait prendre qu'une minute ou deux, donc le timeout ne devrait pas être réglé beaucoup plus haut que cela. – webbiedave

+1

D'accord, il devrait être réglé à une valeur raisonnable qui permet aux scripts de terminer. – Matthew

+0

merci pour la réponse, cela fonctionne définitivement lorsque l'utilisateur commence à charger la page, puis ferme la fenêtre ou l'empêche de fonctionner. il continue à charger toutes les données dans ma base de données mysql. Cependant, jusqu'à présent, cela ne semble pas fonctionner lorsque je fais une requête post-ajax à partir d'une page différente, puis fermez cette page. J'utilise jquery $ post() pour l'appel ajax. Je pourrais me tromper, je dois faire quelques tests de plus. merci :-) – benjaminlotan

0
+0

faire des requêtes synchrones n'empêchera pas l'utilisateur de quitter. * Rien * peut empêcher l'utilisateur d'arrêter toute requête au milieu. –

+0

ouais, je sais. peut-être que j'ai utilisé les mauvais mots (assurer). edit ... –

+1

Cela n'empêchera pas non plus le script PHP d'abandonner, car Apache et PHP tueront le script dès que la connexion réseau sera fermée (à moins que vous ne définissiez 'ignore_user_abort (TRUE)' comme indiqué dans la réponse de konforce –