|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 33 ![]() |
Bonjour,
J'ai essayé le code indiqué dans la FAQ, mais j'ai du mal l'essayer car mon fichier .csv apparait directement dans ma page en texte et je n'ai pas la boite de dialogue de téléchargement. http://php.developpez.com/faq/?page=..._forcedownload J'ai du coup repris un vieux fichier qui lui fonctionnait et qui ne me semblait pas bien différent. Alors je ne sais pas trop ... j'ai utilisé votre code en le mettant dans une fonction que j'appelle depuis la page où je génère mon fichier en passant son nom en paramètre. Par contre, le fichier que j'utilise, lui, contient ça au début : Code :
et il est appelé par un lien du style Code :
<a href="telecharge.php?Fichier_a_telecharger=nomFichier"&chemin=nomDossier Voilà, si ça peut vous servir ... |
||
|
|
00
|
|
|
#2 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Salut virgrennes
Je me permets de te faire remarquer que ton exemple crée la variable $type mais qu'il ne l'utilise pas. Le "switch" ne sert donc à rien. En outre, tu ne protèges pas tes variables dans $_REQUEST, ce qui rend ton script vulnérable à la dangereuse faille d'injection de headers. Puisque ton exemple et celui de la FAQ utilisent essentiellement la même technique, je te recommande d'utiliser la version de la FAQ, qui est sécurisée.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 33 ![]() |
Bonjour,
pour la variable $type, elle est utilisée : Code :
header("Content-Transfer-Encoding: $type\n"); la correction devrait être : Code :
header("Content-Transfer-Encoding: ".$type."\n"); Enfin, pour mon post, je crois que comme d'habitude, j'ai voulu trop en dire et n'ai pas été claire du tout, j'ai l'habitude J'ai déjà testé la FAQ en mettant le code indiqué dans le mien, mais ça ne fonctionne pas, ou du moins, ça n'ouvre pas la fenêtre de téléchargement, ça affiche simplement le contenu de mon fichier dans ma page. Donc, ce que je voulais dire c'est que, si il faut mettre le code de la FAQ dans un autre fichier qu'il faut appeler avec un onclick ou href, ce serait peut-être intéressant de l'expliquer et si il y a une autre manière de l'utiliser, alors peut-être l'indiquer aussi. merci de votre réponse en tout cas, je vais regarder à mes variables |
|
|
00
|
|
|
#4 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Au temps pour moi, je n'avais pas vu pour la variable. Elle n'est pas mal utilisée, c'est moi qui ne l'avais pas vue.
Ton commentaire "Surtout ne pas enlever le \n" m'étonne, car habituellement un \n supplémentaire termine le bloc des headers et marque le début du document. Dans ton cas, le document commencerait donc à "Content-Length" ![]() Peux-tu m'en dire davantage sur ton utilisation ? Quel navigateur as-tu esssayé, dans quelle version ? Peux-tu m'indiquer un lien pour essayer par moi-même, éventuellement en fournissant le code PHP exact ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 33 ![]() |
Alors déjà, j'avoue tout, ce code n'est pas complètement de moi, j'en ai découvert le système en 2002, mais je ne me souviens pas de qui en a la paternité (ou maternité, arrêtons un peu ce sexisme
Donc pour le \n, je ne me souviens plus, mais j'ai du tester avec et sans à l'époque, car ce commentaire vient de moi, mais pourquoi, je vais reessayer Pour ce qui est de son fonctionnement, je vais t'en donner un exemple : http://kalifrance.com/download.php tu cliques sur n'importe quel produit et tu verras ce qui se passe. Pour la méthodologie du truc : dans la page simplement appeler le fichier téléchargement dans le a href en passant le nom du fichier et le chemin en paramètre (évidement, pour ce qui est de la protection des données, c'est moyen vu que c'est du GET et non du POST) Et ensuite le fichier telechrg.php contient le code cité plus haut puis une structure html-head-body classique vide (je peux te l'envoyer en mail si tu veux) donc rien de bien compliqué et à quoi il me sert dans mon nouveau site, à permettre le téléchargement d'un fichier csv issu d'une liste de contact récupérée à chaque fois que les gens déposent un message sur mon site. le problème, c'est que je voudrais ne pas avoir à créer le fichier csv dans ce fichier de téléchargement, pour qu'il reste le plus généraliste possible et qu'il me serve partout dans mon site et ne soit pas plein de fonctions qui n'ont rien à voir avoir avec son action première. donc il me faut - cliquer sur export - lancer un script qui génère le csv (ou autre) - quand le script de génération est finit, lancer ce fichier comme avec un href est-ce que tu as toutes les billes? en tout cas, c'est gentil d'y réfléchir avec moi, merci |
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 33 ![]() |
effectivement, le \n ne semble rien changer...
juste comme ça, il a l'air joli ton avatar? c'est toi qui l'a dessiné? |
|
|
00
|
|
|
#7 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Je te remercie mais, en fait, j'arrive très bien à faire fonctionner le script. Et je sais à quoi doit ressembler un script qui fonctionne, ce n'est pas cela qu'il me faut mais plutôt un exemple qui ne fonctionne pas (et le source associé, si possible).
Au sujet de la sécurité, ce n'est pas GET ou POST le problème, puisqu'il est tout autant possible de forger une requête GET que POST. En fait, c'est simplement que tu donnes un chemin d'accès et un nom de fichier. Que se passe-t-il si je modifie le paramètre à un script existant sur ton site, ou pire si je donne le nom de ton script de config (à supposer que je parvienne à le deviner) ? ![]() Tu devrais enlever ce sript immédiatement, et mettre en place une BDD : indique l'ID numérique du fichier en paramètre, et utilise-le côté serveur pour déterminer le fichier à télécharger. C'est la meilleure approche. [Edit] Merci Non, je n'ai aucun talent de graphisme, on me l'a fait à une convention il y a quelques années.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#8 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 33 ![]() |
pour l'id, ça va être plus contraignant qu'autre chose,car j'ai un seul fichier qui est généré à la volée quand on clique sur le bouton export dans mon admin.
donc mettre en place une table pour ça ... mais pourquoi pas sinon, justement, je voudrais pouvoir le faire côté serveur directement après la génération de mon fichier, mais je ne sais pas comment en php, est-ce qu'il y a un truc équivalent aux createobject etc. de asp, surement en "flux" mais comme je n'y connais rien en flux, je n'ai aps encore osé m'y aventurer de peur de chercher pendant 15j dnas la mauvaise direction sans le savoir vu que je n'y connais rien. Sinon, pour un script qui ne marche pas... Je ne comprends pas trop alros je vais te donner ce que j'ai fait avec le code de la FAQ la première fois que je l'ai utilisé : Code :
et là, le readfile fait exactement ce qu'on lui demande, il envoi à la sortie standard son contenu => donc le texte de mon csv apparait dan sma page au lieu de lancer une fenêtre de téléchargement... voilà ce qui n'allait pas |
||
|
|
00
|
|
|
#9 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
C'st bien ce que je te dis, cela fonctionne pour moi (FF2 et IE7). Quel navigateur utilises-tu ?
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#10 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 33 ![]() |
FF2 et IE7 aussi sinon, je suis sur Vista...
je teste ton test... |
|
|
00
|
|
|
#11 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 33 ![]() |
pas moi, mais je crois savoir pourquoi :
dans le ficheir csv.php, il n'y a rien derrière ... alors que moi c'est du php dans plein d'html (un formulaire, une charte etc..) ou alors je deviens folle, je vais aller manger, ça me remettra le cerveau à l'endroit bon app si tu manges aussi |
|
|
00
|
|
|
#12 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 33 ![]() |
bon, je laisse tomber, je vais chercher un moyen de lancer un fichier côté serveur et voilà.
Merci quand mm du coup de main et bon courage pour la suite |
|
|
00
|
|
|
#13 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Si tu veux forcer le téléchargement d'un fichier, il ne faut rien envoyer après readfile()
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#14 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 33 ![]() |
je sais c'est pour ça que ça ne va pas sur mon système
imagines : tu vas sur l'admin : authentification+ un clic pour se connecter ensuite tu vas sur la page des contacts (un clic dans le menu) ensuite tu cliques sur les cases des contacts à exporter (ou sur "tout cocher") ensuite tu cliques sur "export" et là il faudrait encore cliquer sur un lien pour télécharger le fichier ... non, ça fait un clic de trop ... non, clairement il faut que la fenêtre se lance quand on clique sur "export", mais comme il faut savoir quelle liste est à exporter (form), il faut forcément, soumettre le formulaire avant ... donc pouvoir lancer le téléchargement dans la foulée de manière transparente... y'a plein de gens qui le font, pourquoi moi je n'y arrive pas ... |
|
|
00
|
|
|
#15 |
![]() ![]() Inscription : juin 2003 Messages : 4 893 ![]() |
à place du "readfile", il suffit que tu fasses un "echo" du contenu du fichier que tu veux proposer en téléchargement, tu n'es pas obligé de créer un fichier temporaire sur le serveur
__________________
Modérateur PHP |
|
|
00
|
|
|
#16 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Tu as un if, il te suffit de mettre le formulaire dans le else
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#17 |
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 33 ![]() |
Bonjour,
pour Mathieu : euh.. mais si je fais un echo du contenu du fichier, c'est qu'il y a un fichier, et si je ne le génère pas, comment est-ce que j'aurai un fichier dont je pourrai afficher le contenu? c'est pas grave... Tu voulais surement dire autre chose, mais comme le réveil est difficile je ne comprends pas pour Yogui : et comment je fais pour tjs voir mon formulaire pendant que je génère mon code et que je lance le téléchargement si je le mets dans le else? Sinon, je ferais une page de traitement en plus et ce serait baclé. Le but du jeu c'est que ce soit simple fonctionnel et avec le minimum de clic pour l'utilisateur... Donc forcément compliqué pour moi je te montre la tête de mon admin que tu te rendes compte en pièce jointe tu verras que ce serait très nul d'enlever le formulaire ... mais c'est pas possible de faire un code du style ? : blablabla... <body> blablabla... <? if(j'ai cliqué sur export et j'ai des cases cochées){ //chercher les mails en fonction des contacts //les lister avec nom prénom etc. //mettre tout ça en forme dans une variable //charger le tout dans un fichier //lancer telechrg.php pour que mon client récupère son fichier et puisse l'importer dans son client de messagerie préféré? => genre : run("telechrg.php?fichier=test.csv&chemin=./chem/"); } |
|
|
00
|
|
|
#18 | ||
![]() ![]() Inscription : juin 2003 Messages : 4 893 ![]() |
le code du script qui est appelé quand tu cliques sur "export" ressemble à ça :
Code PHP :
__________________
Modérateur PHP |
||
|
|
00
|
|
|
#19 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : janvier 2008 Messages : 33 ![]() |
résultat : le contenu de mon fichier apparait dans ma page et je n'ai pas de proposition de téléchargement.
le code mis en oeuvre : Code :
ps : pas de fichier donc pas de define('CFG_FILESIZE', filesize(CFG_SYSTEM_FILENAME)); define('CFG_FILE_MD5', md5_file(CFG_SYSTEM_FILENAME)); et pas de header('Content-Length: '.CFG_FILESIZE); header('Content-MD5: '.base64_encode(CFG_FILE_MD5)); on est d'accord? ou bien faut-il mettre des valeurs fictives ... ? |
||
|
|
00
|
|
|
#20 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
La taille du fichier est en fait strlen()
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com