[PHP][HEADER] Gros Probleme

Résolu/Fermé
keys69 Messages postés 5 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 21 mai 2008 - 21 mai 2008 à 17:23
 NeoK - 26 avril 2011 à 17:02
Bonjour a tous

J'ai un probleme tres bizar concernant le forcage d'un telechargement automatique.
Mon probleme est le suivant : Je desire apres qu'un utilisateur ai clique sur un bouton submit, lancer automatiquement un telechargement de fichier dont le nom varie en fonction des choix qu'a fait l'utilisateur avant de cliquer sur ce bouton submit ( le fichier serait cree auparavant )

Apres m'etre renseigne j'ai donc insere les headers avant toute ligne d'html :

if(isset($_POST['bouton_submit'])){ // si on a clique sur le bouton submit
	$nom_fichier=$_SESSION['fichier'];
	header("Content-type: application/force-download");
	header("Content-Disposition:attachment; filename=' ".$nom_fichier." ' ");
	readfile('C:/wamp/www/login/project/Files/'.$nom_fichier.'); // je travaille en local
}


Voila ce qui est etrange c'est que quand je clique sur ce fameux bouton j'ai bien une fenetre qui s'ouvre me demandant si je veux telecharger le fichier qui porte le bon nom. Cependant une fois telecharge et ouvert je n'obtient pas du tout le contenu du vrai fichier mais le code html de la page d'ou je viens ( en l'occurence celle qui contient le bouton submit ).
En fait j'ai l'impression que readfile ne va pas chercher le fichier du tout malgres que mon chemin soit exacte ( je n'ai aucune erreur suite a l'execution du code ).

Apres avoir consulte bon nombre de topic j'ai essaye en remplacant le header("Content-type: application/force-download"); , en essayant divers chemin dans mon readfile. De plus, je n'ai aucune ligne blanche dans le fichier telecharge avant tout code html...

Bref je ne trouve rien sur google comparable a mon probleme, si quelqu'un peut m'aider ce serait avec plus grande joie :)

Merci bcp d'avance

ps : dsl pour les accents je bosses sur qwerty :p

EDIT : En fait le fichier telecharger contient bien le contenu de mon fichier mais il concatene ensuite le code HTML de la page d'ou je viens...vraiment bizar :s
A voir également:

5 réponses

keys69 Messages postés 5 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 21 mai 2008 2
21 mai 2008 à 20:48
Vous n'avez pas d'idee ? J'ai vraiment beau chercher je trouve rien :(
2
pepe cyril Messages postés 43 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 18 juin 2009 1
21 mai 2008 à 23:01
Je crois que si tu met que ça, ça devrait forcer le téléchargement:
	header("Content-Disposition:attachment; filename=' ".$nom_fichier." ' ");


A la fin de ta condition il faut mettre un:
exit();

pour ne pas avoir la suite de la page html

Pour voir si le fichier existe bien, tu fait un:
echo 'C:/wamp/www/login/project/Files/'.$nom_fichier;

et tu regarde si il existe.


Enfin, je sais pas comment est défini ton $_SESSION['fichier'], mais suivant comme tu l'a fait, si l'utilisateur a moyen de changer cette variable (par un formulaire par ex), sache qu'il peut accéder à tout ton disque dur... Fais attention
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
21 mai 2008 à 18:19
Salut,

C'est normal que le nom du fichier soit correcte, puisque c'est le premier header qui donne le nom du fichier, qui n'a pas de lien avec le nom du fichier sur le serveur.

Juste deux remarques (et peut-être que ça va marcher ... :D) :

- Avec le " (double quot), les variables sont "executées" : ainsi, tu ne dois pas faire le ' ".$variable." '
- Il y a un problème de ' dans le readfile

Code avec les deux remarques :
if(isset($_POST['bouton_submit'])){ // si on a clique sur le bouton submit
	$nom_fichier=$_SESSION['fichier'];
	header("Content-type: application/force-download");
	header("Content-Disposition:attachment; filename='$nom_fichier' ");
	readfile('C:/wamp/www/login/project/Files/'.$nom_fichier); // je travaille en local
}


Je pense que tu y a pensé, mais t'as bien mis l'extension du fichier dans la variable ?

@Bientôt
0
keys69 Messages postés 5 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 21 mai 2008 2
21 mai 2008 à 19:21
Salut, merci davoir pris un peu de temps pour essayer de m'aider mais ce n'est pas un probleme de quote, d'autant plus qu'en remplacant ce que tu ma dis j'obtient un nom de fichier de la forme : ' nom de fichier ' ( avec des quotes autour)
Sinon oui j'inserais bien l'extension.

Voici un autre exemple de mon probleme avec un fichier fixe test.txt qui contient le texte suivant : abcdef

Voici mon code :

<?php
session_start(); 
if(isset($_POST['bouton_submit'])){ // si on appuie sur le bouton submit
	header("Content-type: application/force-download");
        header("Content-Disposition:attachment; filename=test.txt ");
        readfile($_SERVER['DOCUMENT_ROOT'].'login/project/Files/test.txt'); // prend la racine du serveur
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">

	<head> balises
        </head>
         <body>

blablalalbalblabla

        </body>

</html>



Et donc quand jouvre mon fichier telecharger ca me donne ceci :


abcdef
<html xmlns="http://www.w3.org/1999/xhtml">

<head> balises
</head>
<body>

blablalalbalblabla

</body>

</html>



Bref ca concatene quoi en prenant en inserant le contenu du fichier en premier....
0
keys69 Messages postés 5 Date d'inscription mercredi 21 mai 2008 Statut Membre Dernière intervention 21 mai 2008 2
21 mai 2008 à 23:45
Ben ecoute pepe cyril tu viens de resoudre ce qui depuis 2 jours me causes des miseres je te remercies vraiment vraiment bcp :) !!

Le probleme etait en effet un simple exit() a rajouter, je pouvais pas l'inventer lol

Niveau securite la variable de session ne peut pas etre modifier par lutilisateur donc ca ne devrai pas poser de probleme :)

Merci bcp mec !
0

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

Posez votre question
Merci beaucoup également, de même c'est le seul post à ce sujet que j'ai trouvé :) .
0