Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

dom, javascript et refresh

2 réponses
Avatar
Nico
Salut

Dans une page en php, je crée un fichier zip.
Je voudrai que le dl du fichier se lance automatiquement à la fin.

J'ai tenté un document.location.href = monfichier.zip

Mais ça m'efface toute la page or je voudrai que le texte reste au
lancement du téléchargement comme sur cette page :
http://www.easyphp.org/telechargements/dn.php?F=easyphp2-0b1
(parce que j'ai mes messages d'erreur notamment qui s'affichent)

Donc je me tourne vers les meta refresh

Pb : je crée mon fichier à télécharger dans la page donc je peux pas
donner un time-end sûr pour le départ du téléchargement.

Du coup je me suis tourné vers le DOM et j'essaie de mettre ma balise en
fin de page avec
echo "<script type=\"text/javascript\">" ;
echo " var Noeud = document.createElement('meta') ; \n" ;
echo " var Parent = document.getElementsByTagName('head').item(0); ";
echo " Noeud.setAttribute('HTTP-EQUIV', 'Refresh') ; \n" ;
echo " Noeud.setAttribute('Content','2;url=./export/$dossier.zip');";
echo " Parent.appendChild(Noeud); \n" ;
echo "</script> \n" ;

Mon nouveau noeud apparaît bien dans l'inspecteur DOM mais que nenni
pour le refresh :(

Des avis ? des suggestions ?

Nico

Réflexion complémentaire :

En fait question de base avant tout ça :
Le refresh d'une page se lance à la lecture du refresh ou à la fin de la
lecture de la page (cad balise html fermante)

2 réponses

Avatar
Thomas Harding
Le 11-08-2007, Nico a écrit:
Dans une page en php, je crée un fichier zip.
Je voudrai que le dl du fichier se lance automatiquement à la fin.



Il faut que tu fasses le traitement du fichier zip avant tout affichage,
puis que tu fasses appel à la fonction "headers" de php, en fixant pour
le header type "application/octet-stream".

Après les fonctions headers, tu fait un echo ou print ou fpassthru de
ton fichier zip (ou de la variable qui le contient), et enfin tu quittes
immédiatement avant le reste de la page.

Evidemment, au tout début, tu auras testé une variable de la requête
pour choisir entre traitement+upload ou affichage de la page.

Pour les détails, je te laisses le loisir de poser la question dans
fr.comp.lang.php :)

HTH,
--
Thomas Harding
Avatar
Pierre Goiffon
Thomas Harding wrote:
Dans une page en php, je crée un fichier zip.
Je voudrai que le dl du fichier se lance automatiquement à la fin.



Il faut que tu fasses le traitement du fichier zip avant tout affichage,
puis que tu fasses appel à la fonction "headers" de php, en fixant pour
le header type "application/octet-stream".



Je suis très peu partisan de cette solution ! Nous en parlons
régulièrement ici... Jouer avec le content-type Mime est une très
mauvaise chose ! Et on peut arriver à un résultat identique en utilisant
l'entête content-disposition. Voir cette fiche de la kb pour un exemple :
http://support.microsoft.com/?id&0519

Au final, bien se souvenir que comme toujours en Web on ne fait que
proposer : le résultat final dépendra du bon vouloir de l'utilisateur
(ou de son administrateur)