mortiis
Messages postés120Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention 9 mars 2008
-
14 oct. 2004 à 09:11
cs_nlh
Messages postés93Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention 9 décembre 2007
-
16 oct. 2004 à 22:52
Bonjour à tous
J'ai un script qui fait un download forcé sur un fichier zip.
En fait ce script génère un fichier zip selon les fichiers que l'utilisateur à sélectionné et ensuite envoi le zip par download forcé et finalement supprime le fichier zip.
Tout sa fonctionne à merveille.
Le problèmme est que si l'utilisateur à sélectionner pour 100 mo de fichier sa prend un bon 30 seconde avant que mon script`ait eu le temps de faire le zip. Alors si pendent ce temps, le client ferme le browser, mon script continu à tourner et le fichier zip se créé quand même, par contre, l'envoi ne s'effectu pas puisque le client est fermé, ce qui a pour effet que le script arrête et que le fichier zip ne se supprime pas.
Il peut y avoir un autre problèmme qui est que si l'utilisateur appuy sur le bouton annuler de la boite d'enregistrement du fichier, le script arrête aussi de tourner et ne se rend pas non plus au code qui supprime le fichier zip temporaire.
Alors ce que je voudrait faire c'est valider si l'utilisateur appuy sur la touche annuler pour pouvoir faire un unlink sur le zip.
Est-ce possible ? je sait que sa se fait avec la fenêtre d'identification.
En un deuxième temps pour savoir si la fenêtre est fermée avant de commencer le download.
Je sait pas si sa se fait, mais p-e en envoyant une entete http avec header ?
J'avait pense a onunload de html avec du javascript, mais le problèmme c'est que la fenêtre est vide puisque c'est un download automatique et qu'on ne peut pas écrire dans la fenêtre sinon sa marche pas.
Bon je crois que le problèmme est bien illustré et ce que je cherche aussi. Je serait bien content d'avoir une solution qui fonctionne, car j'ai épuiser toutes mes ressources et toutes mes idées aussi farfelues les unes que les autres.
Alors toutes les suggestions moindrement sensées sont les bienvenue
cs_nlh
Messages postés93Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention 9 décembre 20071 16 oct. 2004 à 15:52
alors pour le premier probleme... il faut que le script s'arrete quand le client ferme la fenetre :
si c'est ton propre serveur je te conseille de le configurer pour arreter l'execution du script si le client a fermer la fenetre (ignore_user_abort dans le fichier php.ini), afin de ne pas le faire bosser pour rien dans le cas d'un gros fichier.
ou/et de mettre ca dans ton php.
//quand le script se ferme
//on exectute la fonction shutdown
register_shutdown_function("shutdown");
//voila la fonction shutdown
function shutdown(){
//elle verifie de quelle facon c'est couper le script
//si c'est le client qui a coupé le script alors
if(connection_status()=="1"){
//on supprime le fichier qui vien de se creer
supprimer le fichier
}
}
sinon j'ai pas bien compris comment tu supprimais tes fichiers ducoup j'ai pas compris tres bien les problemes suivants. mais a vue de nez je pense que tu peux en resoudre pas mal rien qu'avec ca...
Emailing-Online est en cour de réalisation, mais vous pouvez quand meme regarder et tester.
cs_nlh
Messages postés93Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention 9 décembre 20071 16 oct. 2004 à 20:36
ignore_user_abort(false);
ca ca ne sert a rien... c'est dans le php.ini qu'il faut changer ca... mais c'est optionnel, t'embete pas avec ca...
if(connection_aborted())
cette fonction ne marche plus depuis la version 3 je crois... sert toi de celle que je t'ai donné connection_status(), si elle retourne 1 c'est que le client a fermer ca fenetre
sinon la deuxieme methode c'est pas la bonne dutout :les fonction connection_aborted() ou connection_status() ne fonctionnent que lorsque le script est terminé. donc cette fonction ne sert que dans un truc du genre register_shutdown_function
pi voila..
Emailing-Online est en cour de réalisation, mais vous pouvez quand meme regarder et tester.
Vous n’avez pas trouvé la réponse que vous recherchez ?
mortiis
Messages postés120Date d'inscriptionmardi 11 février 2003StatutMembreDernière intervention 9 mars 2008 16 oct. 2004 à 22:37
Bonjour à tous
J'ai réessayer :
register_shutdown_function("shutdown");
//voila la fonction shutdown
function shutdown()
{
mkdir("k://" . connection_status());
if(connection_status() == 1)
{
mkdir("k://del");
}
}
J'ai aussi essayer avec le "1" comme dans ton exemple
j'ai aussi essayer avec et sans :
ignore_user_abort
Et j'ai toujours le même résultat connection_status() vaut toujours 0.
La fonction shutdown est appelé, mais toujours après que le script ait fini l'exécution.
Même si le client ferme le browser le script continu à s'exécuté et à la fin je recoit toujours connection_status() == 0
Alors je commence à croire que soit ce script ne fonctionne pas, soit il faut configurer qqc dans php.ini ou dans httpd.conf
cs_nlh
Messages postés93Date d'inscriptionmercredi 21 avril 2004StatutMembreDernière intervention 9 décembre 20071 16 oct. 2004 à 22:50
ce qui est sure c'est que la fonction va forcement s'executer a la fin du script... mais ca a la rigueur c'est pas vraiment grave le but c'est que tu puisse réagir en fonction de l'action de l'utilisateur... si tu veux qu'il se ferme au moment de la fermeture du browser va changer la ligne ignore_user_abort dans le php.ini.. c'est tout ce que je sais...
pour ce qui est du connection_status qui reste a "0", je ne sais pas pourquoi... normalement ca veux dire que le script s'est executer normalement, et que ni time_out, ni fermeture du browser ont pertubé le script.
donc j'en deduis soit que le scripte s'est executé correctement
soit que cette fonction ne marche pas sur ton serveur..
pour tester configure le time_out à 1 sec
et regarde si connection_status() == 2.. dans ce cas ca veut dire que la fonction marche...
désolé que ca ne fonctionne pas chez toi.... chez moi c'est impec.. je sais pas quoi te dire...
Emailing-Online est en cour de réalisation, mais vous pouvez quand meme regarder et tester.