Page 1 sur 1

Download de fichier et bouton annuler

Posté : 16 oct. 2009, 15:08
par Mouss
Bonjour à tous,

depuis ce matin je galère sur un problème en apparence tout bête mais que je n'arrive pas à résoudre, d'ou un poste dans la rubrique avancée pour quelque chose qui peut paraître plus que basique au premier abord.
Je force le download d'un fichier pdf avec le code suivant (je passe sur la sécurité & co) :
	if ($this->_hasParam('file') && $this->getRequest()->isGet()
			&& Zend_Loader::isReadable($file  = urldecode($this->_getParam('file')))) {
		header("Cache-Control: public"); 
		header("Pragma: public"); 
		header("Content-Description: File Transfer");
		header("Content-type: application/octet-stream");
		header("Content-Length: " . filesize($file));
		header("Content-Disposition: attachment; filename=" . basename($file));
		header("Content-Transfer-Encoding: binary");
		flush();
		if (false !== ($fp = @fopen($file, 'r'))) {
			while (!feof($fp)) {
			    echo fread($fp,  8192);
			    flush();
			}
			fclose($fp);
		}
	}
Aucun problème, le download se passe très bien. Par contre, si je clique sur le bouton "Annuler" de mon navigateur et que je change de page, plus moyen, syndrôme de la page blanche. La seule façon de ne pas avoir à attendre une plombe pour ré-accéder au site est de supprimer les cookies.
Avec ou sans while, c'est la même chose.

Si quelqu'un a une solution mircale ça serait tout simplement terrible.

Re: Download de fichier et bouton annuler

Posté : 16 oct. 2009, 15:20
par @rthur
Bonjour,

As tu essayé avec un navigateur différent?

Ton code ne fait apparaitre aucune utilisation des cookies donc cette portion de code n'est probablement pas celle qui est problématique.
Installe l'extension Firefox WebDeveloper : http://chrispederick.com/work/web-developer/ et regarde quel est le cookie qui pose problème (tu peux les supprimer/modifier un par un via cette extention)

Re: Download de fichier et bouton annuler

Posté : 16 oct. 2009, 15:38
par Mouss
Merci pour ta réponse
Je suis déjà pourvu de la webdevelopper toolbar, firebug et autres outils nécessaires.
Le problème ne vient pas du script en soi, si je clique sur le bouton annuler et que je me rends sur une autre page genre test.php avec aucune ligne de code dedans, ça mouline également dans le vide.
Si je supprime le cookie PHPSESSID, tout fonctionne à nouveau, je commence à me demander si ce n'est pas plus un problème au niveau Apache.

Re: Download de fichier et bouton annuler

Posté : 16 oct. 2009, 16:10
par @rthur
je commence à me demander si ce n'est pas plus un problème au niveau Apache.
ça aurait éventuellement pu avec les directives KeepAlive et MaxKeepAlive mais c'est décorelé de PHPSESSID qui ne concerne que PHP... :-k

Si tu télécharges un gros fichier normalement (c'est à dire sans passer via ton script PHP), rencontres-tu le même problème?
Et sinon, as-tu essayé sur un autre serveur (ou en local avec Wampserver par exemple)?

Re: Download de fichier et bouton annuler

Posté : 16 oct. 2009, 16:22
par Mouss
Je viens d'isoler le truc sous le serveur local du taf, ça marche très bien. Vu qu'on a pas la main sur le serveur distant sur lequel on rencontre ce problème, ça promet d'être bien galère pour trouver ce qui se passe.
Je vais faire un phpinfo des deux serveurs et comparer avec un vieux "différence de texte", je crois qu'il n'y a plus le choix.
En tout cas merci à toi @arthur

Re: Download de fichier et bouton annuler

Posté : 16 oct. 2009, 16:58
par Patriboom
Est-ce qu'il ne serait pas plus simple de gérer l'erreur plutôt que d'essayer qu'elle ne se produise pas?

Si un téléchargement a avorté et que le cookie est resté en place, l'usager qui a fait ça et reviendrait sur la page pourrait devoir répondre à une question "voulez-vous vraiment continuer" et par une réponse positive provoquer une recharge de la page, laquelle recharge éliminerait tout cookie relatif à la page de sa mémoire.

Excusez mon incursion ... ma curiosité m'y a forcé.

Re: Download de fichier et bouton annuler

Posté : 16 oct. 2009, 17:56
par @rthur
Est-ce qu'il ne serait pas plus simple de gérer l'erreur plutôt que d'essayer qu'elle ne se produise pas?
L'objectif de tester son code sur un autre serveur n'est pas "d'essayer qu'elle ne se produise pas" mais de chercher l'origine du problème en isolant les causes possibles (ex: est-ce que c'est un problème lié à la config serveur) ;)
Si un téléchargement a avorté et que le cookie est resté en place, l'usager qui a fait ça et reviendrait sur la page pourrait devoir répondre à une question "voulez-vous vraiment continuer" et par une réponse positive provoquer une recharge de la page, laquelle recharge éliminerait tout cookie relatif à la page de sa mémoire.
Sauf que si j'ai bien compris le problème, une fois le téléchargement avorté, l'utilisateur ne peut plus accéder au serveur du tout... sauf en supprimant manuellement ses cookies

Re: Download de fichier et bouton annuler

Posté : 16 oct. 2009, 18:28
par Patriboom
Y aurait-il alors moyen de remplacer le bouton "Annuler" par un pseudo bouton "Annuler" du style:

Code : Tout sélectionner

<input type="botton" value="Annuler" onclick="javascript: agirainsi();" Name="test">
Celui-ci pourrait alors lancer sur une page d'élimination des cookies.

Re: Download de fichier et bouton annuler

Posté : 19 oct. 2009, 10:10
par Mouss
Salut Patriboom,

il s'agit d'une fenêtre modale, issue du navigateur, on a pas la main sur le fait d'y afficher tel ou tel bouton ;)

@rthur, il s'agissait bien d'un souci chez l'hébergeur.

Bonne journée à tous