Forcer un download

Résolu
zwdja5 Messages postés 6 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 4 mars 2010 - 3 mars 2010 à 12:26
zwdja5 Messages postés 6 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 4 mars 2010 - 4 mars 2010 à 23:50
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

ChasseurDeChimeres Messages postés 292 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 15 janvier 2013 3
3 mars 2010 à 16:54
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.
3
ChasseurDeChimeres Messages postés 292 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 15 janvier 2013 3
3 mars 2010 à 18:54
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")
3
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
3 mars 2010 à 20:28
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 -
3
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
4 mars 2010 à 07:29
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 -
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zwdja5 Messages postés 6 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 4 mars 2010
3 mars 2010 à 18:31
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 ??
0
zwdja5 Messages postés 6 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 4 mars 2010
3 mars 2010 à 19:52
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;
0
zwdja5 Messages postés 6 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 4 mars 2010
3 mars 2010 à 19:57
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.
0
zwdja5 Messages postés 6 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 4 mars 2010
3 mars 2010 à 21:30
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 ?
0
zwdja5 Messages postés 6 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 4 mars 2010
4 mars 2010 à 23:50
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.
0