Posez votre question Signaler

Script pour forcer le telechargement [Résolu]

neuneu - Dernière réponse le 12 déc. 2009 à 04:59
bonjour
je cherche un script php pour forcer le telechargement
pouvez vous me renseigner ?
merci
Lire la suite 

Script pour forcer le telechargement »

Suggestions
20 réponses
Réponse
+5
moins plus
$fichier = "$a.txt" ; est tu sur de ca ? que contient $a ? etais ce a.txt ?

bon en fait on va reprendre calmement ca va etre mieux comme ca :

download.php : (ne rien modifier ou ajouter)
<?
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=".$filename);
readfile($chemin.$filename);
?>



dans le fichier du lien :
...

$filename = "nom du fichier à telecharger";
$dir = "chemin complet vers le fichier/" ;
$chemin = $dir.$filename;

...
print "<a href='download.php?chemin=$chemin&filename=$filename'>download</a>" ;

...
?>
Ajouter un commentaire
Réponse
+1
moins plus
$fichier = "$a.txt" ; est tu sur de ca ? que contient $a ? etais ce a.txt ?

bon en fait on va reprendre calmement ca va etre mieux comme ca :

download.php : (ne rien modifier ou ajouter)
<?
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=".$filename);
readfile($chemin.$filename);
?>



dans le fichier du lien :
Ajouter un commentaire
Réponse
+1
moins plus
<?php

if (!empty ($_GET ["download"]) and !empty ($_GET ["download_dir"]) and !empty ($_GET ["download_file"]) and file_exists ($_GET ["download_dir"].$_GET ["download_file"]))
{
header ("Content-type: application/force-download");
header ("Content-Disposition: attachment; filename=".$_GET ["download_file"]);
readfile ($_GET ["download_dir"].$_GET ["download_file"]);
}

$download_file = "image.jpg";
$download_dir = "./";
echo "<a href=index.php?download=true&download_dir=".$download_dir."&download_file=".$download_file.">image</a>";

?>


J'ai clarifié votre truc.
Tu créé un index.php avec le code ci dessus dedant, tu met dans cet exemple une image.jpg à coté du index.php.
Ce code vérifie que les variables existent bien et que le fichier existe, c'est quand meme 100 fois plus propre et sécure que vos choses mal codées.

Et puis toi qui me lis si jamais tu débute, car moi aussi j'ai débuté comme tout le monde, n'oubli pas de faire marcher un serveur pour lire ton fichier index.php, il te faudra le logiciel easy php par exemple.

a+
sdm - 30 sept. 2009 à 00:41
Salut,

Ce système peut être très dangereux si un vilain hacker vient à passer sur votre site.
S'il s'amuse taper une url trafiquée dans son navigateur, du style :
votresite.com/download.php?download=true&download_dir=./&download_file=index.php

il téléchargera tout tranquillement le fichier index.php
Et si ce fichier contient les paramètres d'accès mySQL par exemple, attention aux surprises.
Ou même si le fichier contenant les paramètres d'accès mySQL est stocké ailleurs et qu'il y a, par ex., un include ou require("connection_mysql/connect.php") dans ce fichier index.php, le plaisantin pourra s'amuser à taper
votresite.com/download.php?download=true&download_dir=connection_mysql/&download_file=connect.php
pour avoir accès à tout ce qui lui faut.
Je viens de tester et j'ai enregistré comme cela le fichier php sur mon disque dur...

Je conseillerais donc, si on connaît le type de fichier à télécharger, de plomber le truc avec une vérification de l'extension du fichier à télécharger, du genre :
if (substr($_GET["download_file"], -4) == ".jpg") {
// traitement
}
else {
echo "Type de fichier invalide";
}

ou même interdire toute extension ".php" dans la condition si on veut ratisser plus large et autoriser différents types de fichiers en téléchargement (jpg + gif + png + doc + pdf + xls... etc).

Merci de nous signaler si vous voyez d'autres failles de sécurité dans ce traitement.

Stéphane
Ajouter un commentaire
Réponse
+1
moins plus
Allô à vous tous.

J'apporte une précision importante sur un commentaire fait dans cette section. je l'apporte parce que j'ai passé beaucoup de temps à régler quelque chose qui n'a pas été précisé. J'avais besoin de cette info pour un site www.ezstockexchange.com. Donc je vous la donne. Le code de "download" doit non seulement être isolé dans un fichier (ex: download.php) mais ce fichier doit commencer par les balises du php. Pas de <html> avant ou quoique ce soit. Sinon.... le code va quand même fonctionner, excepté que le fichier "downloadé" sera invalide (du moins dans le cas d'un fichier binaire) car l'entête de votre fichier contiendra les premiers caractères insérés avant la balise php... résultat... entête invalide... fichier corrompu ... et invalide. J'ai trouver cela après plusieurs heures de travail... prière :-) et un bon éditeur hexadécimal.

Dès que j'ai enlever les caractères, précédant la balise php tout à fonctionné.

J'ai cherché sur internet du côté anglais et français et nulle part, j'avais l'info. Je la laisse donc au cas où un nouveau passerai par là.

A+
Ajouter un commentaire
Réponse
+0
moins plus
c pas possible je suis un vrai neuneu moi...ca ne marche pas

donc je rexplique pour voir si tu vois d'ou peut venir mon erreur:

le fichier texte ke je veux telecharger se trouve ds le repertoire archive ainsi ke ma page download.php

sur la page ou se trouve le lien permettant le telechargement
g ca:

<?
...
$fichier01=fopen("archive/$val.txt","w+");
...
$filname = "$a.txt" ;
$acces = "archive/download.php?" ;
$fdir = "archive/" ;
$dir= $fdir.$filname;

print "<a href='".$acces."dir=$dir&filname=$filname'>Télécharger !!!</a>" ;
...
fclose($fichier01);
?>


et au niveau de ma page download.php g ca:

<?php
$chemin="archive/download.php?";
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=$filename");
readfile("$chemin");

?>

le message d'erreur ki me met est le suivant:

readfile("archive/download.php?") - No such file or directory in e:\easyphp\www\ping\archive\download.php on line 5

voila...merci encore ;)
Ajouter un commentaire
Réponse
+0
moins plus
merci c bon ca marche (y a une tite modif a faire kan meme au niveau de ce ke tu m as donné :

$chemin = $dir.$filename; doit etre remplacé par :
$chemin = $dir;

oui sinon remplacer $chemin par $dir)

merci beaucoup....je te dois un coup ;)
Ajouter un commentaire
Réponse
+0
moins plus
désolé g eu un peu de mal :s je doit reflechir a plein de trucs a la fois et voila c'est la foire ca marche jamais du 1er coup :'(
Ajouter un commentaire
Réponse
+0
moins plus
J'ai un site scolaire, les eleves doivent faire un examen ,
et les cours sont sur leurs disqes locaux.
Je voudrais un script qui peut verouiller tous les fenaitres lors
de l'activation de l'examen.
batmat- 29 mai 2003 à 15:25
J'aurais tendance à répondre que c'est impossible...
@++

Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
Ajouter un commentaire
Réponse
+0
moins plus
Félicitations Bill_Tcherno ! ;-)

@12C4 ... In medio stat virtus ...
Ipl
Ajouter un commentaire
Réponse
+0
moins plus
que d'erreur da,s ce script proposé

c'est affligeant
Ajouter un commentaire
Réponse
+0
moins plus
exemple pour mon code qui fonctionne bien lui :

dans la page du fichier à télécharger ( une image dans mon exemple):

<?php

$filename = "votrefichier.jpg";
$dir = "http://www.votredomaine/dossier/images/" ;
$chemin = $dir;
print "<a href='download.php?chemin=$chemin&filename=$filename'><p align='center'><span style='font-size:9pt;'><font face='Verdana' color='white'>
Cliquez ici pour enregistrer l'image</font></span></p></a>" ;

?>



dans le download.php (ne rien modifier - le fichier download.php se trouve a la meme racine que la page précédente) :

<?
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=".$filename);
readfile($chemin.$filename);
?>
rn - 2 mars 2009 à 10:18
idiot tu as oublie de recuperer les parametres avec $_GET[''] !
rn - 2 mars 2009 à 10:18
idiot tu as oublie de recuperer les parametres avec $_GET[''] !
rn - 2 mars 2009 à 10:20
idiot tu as oublie de recuperer les parametres avec $_GET[''] !
Ajouter un commentaire
Réponse
-1
moins plus
Voici :

Dans La_page_du_lien.php :
<?php
...
$filname = "nom_du_fichier_a_telecharger" ;
$acces = "download.php?" ; (a modifier pour les pseudoframes)
$fdir = "nom_du_dossier_ou_se_trouve_le_fichier/" ; (na pas oublier le / a la fin)
$dir= $fdir.$filname;

print "<a href='".$access."dir=$dir&filname=$filname'>Télécharger !!!</a>" ;
...
?>

Dans download.php :
<?php
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=$filename");
readfile("$chemin");
?>
Bill_Tcherno- 27 mai 2003 à 13:24
fait gaffe aux fautes d'orthographe dans mes variables
neuneu - 27 mai 2003 à 13:33
bah en faiot g deja testé ce script mais bon g u un probleme:
il me fait telecharger download.php car il me dit ke readfile ne contient rien....d ailleur c koi ta variable $chemin ??

voila si tu pouvais m eclairer ca serait bien sympa ma fois

merci bien

++
Bill_Tcherno- 27 mai 2003 à 13:36
bah ce sont des variables que tu doit configurer si tu veut que ca marche sur ton site,

$chemin ca peut etre par exemple
$chemin = "index.php?page=download.php&" ;

ou alors
$chemin = "un_certain_dossier/download.php?" ;

je crois que tu as besoin de la 2 eme solution !
Ajouter un commentaire
Ce document intitulé « script pour forcer le telechargement » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?