Forcer un download

Résolu
Signaler
Messages postés
6
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
4 mars 2010
-
Messages postés
6
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
4 mars 2010
-
Bonjour,

Voilà, j'ai trouvé plusieurs tutoriaux à ce sujet là forçant un téléchargement. Ceux ci concernaient principalement des extensions telles que .pdf, .zip, . jpeg, ...

En cherchant un pour un fichier géoplan (.g2w) j'ai essayé ceci :

Dans une page nommée download.php :
<?php
switch(strrchr(basename($Fichier_a_telecharger), ".")) {

case ".g2w": $type = "application/vnd.geoplan"; break;
case ".g2w": $type = "application/vnd.geospace"; break;
default: $type = "application/octet-stream"; break;

}

header("Content-disposition: attachment; filename=$Fichier_a_telecharger");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: $type\n"); // Surtout ne pas enlever le \n
header("Content-Length: ".filesize($chemin . $Fichier_a_telecharger));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
readfile($chemin . $Fichier_a_telecharger);
?>


Dans ma page de fihes Géoplan :



Or lorsque je regarde si ça fonctionne, firefox m'ouvre un diaporama avec microsoft office.
Auriez vous une solution pour palier à ça ?

D'avance merci

9 réponses

Messages postés
292
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
15 janvier 2013
3
Salut;
Cela m'a l'air correct, est tu sur que ton firefox n'est pas configuré pour ouvrir ce type de fichier directement dans msoffice, essaye peut être avec un autre navigateur, ou poste un lien qu'on puisse voir comment cela réagi autre part.
Messages postés
292
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
15 janvier 2013
3
re;
As tu essayé sans cette ligne? :
readfile($chemin . $Fichier_a_telecharger);


sinon, je sais pas dans quelle mesure ça peu avoir une incidence, mais dans ton switch, les 2 "case" sont identiques (".g2w")
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,


Déjà ça :
switch(strrchr(basename($Fichier_a_telecharger), ".")) {

... ce n'est pas joli joli.
=>
switch(strrchr(basename($_GET['Fichier_a_telecharger']), ".")) {


Ca pourrait être une explication, surtout si l'affichage des erreurs n'est pas activé.
Tu pourrais te retrouver dans le default du switch, ce qui expliquerait que ton navigateur ouvre le fichier avec une autre application.

Pour déboguer :
Tu devrais tester quel case du switch est validé
T'assurer que l'affichage des erreurs est actif
T'assurer que FF t'affiche bien le type / nom fichier voulu au moment du téléchargement
+ les conseils donnés précédemment (essayer avec un autre navigateur, contrôler les associations prog / extensions)

Attention également à :


=>



Le pb n'est vraisemblablement pas là, mais autant écrire proprement (le %2F ne doit pas être obligatoire, c'est surtout au niveau des " que j'attire ton attention, sans compter qu'il vaut mieux éviter de mettre des accents dans un nom de fichier et/ou une url)


Cordialement,

Kohntark -
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Dans quel cas intervient-il exactement?

Tu peux jeter un oeil à la doc de urlencode et aux liens qu'elle contient

Désolé mais je n'ai pas vu de réponse à ces questions :
Pour déboguer :
Tu devrais tester quel case du switch est validé

Par exemple en plaçant cette ligne juste avant le premier header() :
print_r($_GET);
die('<hr />'.$type);


Qu'est ce que cela dit ?


T'assurer que l'affichage des erreurs est actif

... en ajoutant :
<?php
ini_set('display_errors', 1);
error_reporting(-1);
?>

tout en haut de tes pages


T'assurer que FF t'affiche bien le type / nom fichier voulu au moment du téléchargement

cad les informations présentent dans la fenêtre qui s'ouvre lors du téléchargement


+ les conseils donnés précédemment (essayer avec un autre navigateur, contrôler les associations prog / extensions)

Qu'en est il ??
Pour l'association sous FF : outils>options>applications

readfile($chemin . $Fichier_a_telecharger);

=> même chose que pour $Fichier_a_telecharger et à d'autres endroits dans ton script
readfile($_GET['chemin'] . $_GET['Fichier_a_telecharger']);

=> voir la doc de register_globals


Cordialement,

Kohntark -
Messages postés
6
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
4 mars 2010

Bonsoir et merci pour votre réponse.

Ce qui m'intrigue, j'ai re-testé ce même code sur un autre ordinateur ce midi et ça fonctionnait sans problème.
Or sur celui ci ça continue à me faire la même chose.
Concernant la configuration de firefox, je ne pense que ça vienne de là, parce que sur d'autres sites, je peux ouvrir des fichiers avec la même extension sans problème.
Je me suis donc demandé si le problème ne viendrait pas de mon fichier directement. Mais dans ce cas, quel type de problème ça peut bien être ??
Messages postés
6
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
4 mars 2010

Si je retire cette ligne :
readfile($chemin . $Fichier_a_telecharger);


Il faudra également que je retire le "" de cette ligne là non ? "Fichier_a_telecharger=carré.g2w"



Et dans ce cas ça ne fonctionnera plus...?

Pour le swich, oui en fait c'est parce que pour géospace l'extension s'est pas g2w mais g3w. D'aïlleurs c'est vrai qu'il faut que je le corrige ça.

Ca donne :

case ".g2w": $type = "application/vnd.geoplan"; break;
case ".g3w": $type = "application/vnd.geospace"; break;
Messages postés
6
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
4 mars 2010

Je viens de tester sans la ligne "readfile($chemin . $Fichier_a_telecharger);" et avec la correction au niveau "g3w" ça ne change rien.
Je vais redémarer le pc voir, ça m'est arrivé à plusieurs reprises de bugger un bon moment et pourtant en rafraîchissant avec la touche F5 à plusieurs reprises. Et suite au redémarrage de l'ordi tout rentrait dans l'ordre.
Messages postés
6
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
4 mars 2010

Merci beaucoup ^^.

Concernant la ligne en HTML, vi je l'avais rectifié, il est vrai que j'ai omis de le faire ici. Par contre, je ne connaissais pas le "%2F" en remplacement au "/" de mon sous dossier. Dans quel cas intervient-il exactement?

Concenrnat le PHP, n'y connaissant pas encore grand chose, bien qu'ayant lu une énorme partie de cours là dessus sur le net ainsi que de tutoriaux, j'ai donc trouvé un code tout fait mais pas pour géoplan.

http://www.destrucsaweb.com/ressources/phpmyannu/goto_45.php

Je l'ai adapté mais je dois admettre ne pas avoir tout saisi.
Donc, je viens d'effectuer les modifs. Sous IE il ne sais même pas de quoi on parle et sur firefox il m'ouvre toujours un fichier PPS (vide d'ailleurs).

Dans quels paramètres je peux voir si ça vient de la configuration, en sachant que ça ne me fait ça qu'avec mon site, puisque sur d'autres sites où l'on propose des fichiers géoplans à charger, ça fonctionne sans problème.

Il est où le smiley qui rougit de honte ?
Messages postés
6
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
4 mars 2010

Merci infiniment pour ton aide kohntark!!

Bon j'ai complètement modifié le code, pas encore tout compris mais au moins ça fonctionne !
La seconde étape ça va être de comprendre ce que j'ai codé parce que je ne supporte pas l'idée de mettre un truc en place sans le comprendre de A à Z.