Script pour forcer le telechargement

Résolu
neuneu -  
 ezstock -
bonjour
je cherche un script php pour forcer le telechargement
pouvez vous me renseigner ?
merci
A voir également:

12 réponses

Bill_Tcherno Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   30
 
$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>" ;

...
?>
5
sylvafilms
 
<?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+
2
sdm
 
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
0
neuneu
 
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 ;)
1
Bill_Tcherno Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   30
 
$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 :
1

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

Posez votre question
ezstock
 
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+
1
Bill_Tcherno Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   30
 
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");
?>
0
Bill_Tcherno Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   30
 
fait gaffe aux fautes d'orthographe dans mes variables
0
neuneu
 
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

++
0
Bill_Tcherno Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   30 > neuneu
 
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 !
0
neuneu
 
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 ;)
0
Bill_Tcherno Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   30
 
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 :'(
0
yahya
 
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.
0
batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention   114
 
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 ?
0
ipl Messages postés 5723 Date d'inscription   Statut Contributeur sécurité Dernière intervention   585
 
Félicitations Bill_Tcherno ! ;-)

@12C4 ... In medio stat virtus ...
Ipl
0
Moi
 
que d'erreur da,s ce script proposé

c'est affligeant
0
stef68
 
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);
?>
0
rn
 
idiot tu as oublie de recuperer les parametres avec $_GET[''] !
0
rn
 
idiot tu as oublie de recuperer les parametres avec $_GET[''] !
0
rn
 
idiot tu as oublie de recuperer les parametres avec $_GET[''] !
0