Script pour forcer le telechargement

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

12 réponses

  1. Bill_Tcherno Messages postés 64 Statut Membre 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
  2. 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
    1. 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
  3. 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
  4. Bill_Tcherno Messages postés 64 Statut Membre 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. Bill_Tcherno Messages postés 64 Statut Membre 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
    1. Bill_Tcherno Messages postés 64 Statut Membre 30
       
      fait gaffe aux fautes d'orthographe dans mes variables
      0
    2. 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
      1. Bill_Tcherno Messages postés 64 Statut Membre 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
  8. 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
  9. Bill_Tcherno Messages postés 64 Statut Membre 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 :'(
    -1
  10. 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
    1. batmat Messages postés 1880 Date d'inscription   Statut Membre 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
  11. ipl Messages postés 5738 Statut Contributeur sécurité 585
     
    Félicitations Bill_Tcherno ! ;-)

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

    c'est affligeant
    0
  13. 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
    1. rn
       
      idiot tu as oublie de recuperer les parametres avec $_GET[''] !
      0
    2. rn
       
      idiot tu as oublie de recuperer les parametres avec $_GET[''] !
      0
    3. rn
       
      idiot tu as oublie de recuperer les parametres avec $_GET[''] !
      0