[ PHP ] fOrcer le téléchargement d'un fichier .txt

fOrcer le téléchargement d'un fichier .txt [ PHP ] - Programmation

Marsh Posté le 19-07-2002 à 12:07:13    

salut,  
on va dire que j'ai un fichier .txt stocké sur le serveur.
 je voudrai que lorsque je click sur le lien pointant sur ce .txt qu'il se télécharge ( que l'invit de download apparaisse) au lieu qu'il s'ouvre dans l' explorer.
 
 
Avez vous une solut ?
 
Merci d'avance  :hello:


---------------
Make Portraits, Not War!  
Reply

Marsh Posté le 19-07-2002 à 12:07:13   

Reply

Marsh Posté le 19-07-2002 à 12:59:55    

Lien du genre :
<a href="get.php?fic=toto.txt">Télécharger</a>
 
et get.php :
<?php
header( "Content-type: application/txt" );
$len = filesize( $_GET["fic"] );
header( "Content-Length: $len" );
header( "Content-Disposition: attachment; filename=" . $_GET["fic"] );
readfile($_GET["fic"]);
?>


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-07-2002 à 13:04:50    

Fait gaffe quand même !
 
Ne recopie pas bêtement ce code !
 
Vérifie le nom du fichier que tu va envoyer !
 
Il ne faut pas laisser passer les trucs du genre :
 
http://www.tonsite.com/get.php?fic=connect.php
 
Avec connect.php qui contient par exemple un mot de passe de connexion à un base...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-07-2002 à 13:14:04    

oky merci en fait je viens de trouver le tuto ici:
 
http://www.phpindex.com/trucsetast [...] lement=146
 
ça ressemble à ce que tu m'as dis en effet.
 
Bon, voila comment j'ai fais:
 
ma page ou il ya  lien (et ou le .txt ce crée):
 

Code :
  1. $filename = "$nom - $titre.txt";
  2. $dir = "scriptsphp3/lyrics/$filename";
  3. echo "<a href=\"scriptsphp3/lyrics/download.php?dir=$dir&filename=$filename\">télécharger</a>";
  4. if($fp = fopen($dir,"w" )){
  5. fwrite($fp,$parole);
  6. fclose($fp);
  7. }


 
ma page download:
 

Code :
  1. <?php
  2. header("Content-type: application/force-download" );
  3. header("Content-Disposition: attachment; filename=$filename" );
  4. readfile("$dir" );
  5. ?>


 
bon, le .txt se crée bien et tout mais à l'interieur, au lieu d'avoir les paroles comme prévu et bien j'ai ce message d'erreur:
 
<br />
<b>Warning</b>:  readfile("scriptsphp3/lyrics/Metallica - Nothing else matters.txt" ) - No such file or directory in <b>e:\sites internet\ludo project\scriptsphp3\lyrics\download.php</b> on line <b>4</b><br />
 
 
ça veut dire quoi exactement ??
 
Merci d'avance  :hello:  


---------------
Make Portraits, Not War!  
Reply

Marsh Posté le 19-07-2002 à 13:25:25    

Ton script download.php il est dans :
e:\sites internet\ludo project\scriptsphp3\lyrics\download.php
 
Donc si tu lui donne un nom de fichier comme çà :
 
scriptsphp3/lyrics/Metallica - Nothing else matters.txt
 
Il le cherche en relatif, donc il cherche :  
 
e:\sites internet\ludo project\scriptsphp3\lyrics\scriptsphp3/lyrics/Metallica - Nothing else matters.txt
 
 
Donc, soit tu met un chemein absolu, soit tu fait gaffe dans tes chemins relatifs !
 
Ok ?
 
Et je répète mon avertissement !
 
Dans download.php, ne fait pas de readfile sans vérifier que le fichier demandé est bien autorisé (par toi) au téléchargement.
 
Le plus simple, c'est de n'autoriser que les fichiers .txt, dans un répertoire spécial pour çà !
Si tu code en dur le répertoire dans download.php (pourquoi pas!) fait gaffe au petit malin qui demande un fichier du genre ../../../../mon_cv.txt !
 
IL FAUT ETRE PARANO QUAND ON FAIT DU PHP !
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 19-07-2002 à 13:48:07    

bah voui mais j'ai betement suivi le tuto moi, et ils disent :
 
$dir= "chemin complet vers le fichier/".$filname;
 
c'est donc ce que j'ai fais.
et puis je suis un peu debutant en php, dsl je n'ai pas tout compri à ce que tu as dis.
 
BOn, deja j'ai fais un rep "temp" pour stocker les .txt temporaires ( oui temporaire car je compte effacer le .txt directement apres ;))
 
Ensuite, il faut regler les chemins c'est ça ? mais lequel ?


Message édité par ludo2604 le 19-07-2002 à 13:48:57

---------------
Make Portraits, Not War!  
Reply

Marsh Posté le 19-07-2002 à 14:11:12    

ah ok en fait j'ai mis ça :
 
$dir = "E:\Sites internet\Ludo project\scriptsphp3/lyrics/temp/$filename";
 
au lieu de :
 
$dir = "scriptsphp3/lyrics/$filename";  
 
et ça a l'air de marcher...
 
Mais comment je ferrai sur le serveur FRee ?????
 
edit: arf non ça ne marche que sur mon PC :/


Message édité par ludo2604 le 19-07-2002 à 14:41:26

---------------
Make Portraits, Not War!  
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed