IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

téléchargement d'un document


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 35
    Points
    35
    Par défaut téléchargement d'un document
    j'ai dans une première page "page1.php" un lien "a.pdf"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (<a href=\"telecharger.php?fichier=a.pdf\">)
    ce lien est pour le telechargement du fichier "a.pdf"

    le code du telecherger.php est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?
    $fichier=$_GET['fichier'];
    switch(strrchr(basename($fichier), ".")) {
    case ".pdf": $type = "application/pdf"; break;
    case ".gif": $type = "image/gif"; break;
     default:
          print "<FONT COLOR=red><CENTER>";
          print "  Ca va pas non!!!<BR>"; 
          break;
      }
     $nomfichier=basename($fichier);
    header("Content-disposition: attachment; filename=$nomfichier");
      header("Content-Type: application/force-download");
      header("Content-Transfer-Encoding: $type\n"); 
      header("Content-Length: ".filesize($fichier));
      header("Pragma: no-cache");
      header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, public");
      header("Expires: 0");
      readfile($fichier);
    ?>
    quand je test le telechargement s'effectue mais quand j'ouvre le fichier télécharger il ne s'ouvre pas pkoi? et comment je dois faire, en réalité on dirait qu'il crée un nouveau doc pdf mais ne fait pas une copie du document a.pdf existant. merci d'avance

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    Points : 35
    Points
    35
    Par défaut
    problème résolu:
    solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href=\"telecharger.php?fichier=../doc_cours/a.pdf">
    il faut mettre le chemin entier où se trouve le fichier a.pdf

    merci

  3. #3
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 327
    Points : 15 670
    Points
    15 670
    Par défaut
    attention il y a un problème de sécurité si jamais on tape la commande suivante par exemple : "telecharger.php?fichier=../../../home/minoucha/documentsperso/listeMotDePasse.pdf" on pourra récupérer le fichier, tu devrais mieux controler le contenu de la variable $_GET['fichier']

  4. #4
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	// Dossier où se trouvent les fichiers à télécharger
    	$dir = './upload/';
     
    	$fichier = basename($_GET['fichier']);
     
    	if( ! file_exists($dir.$fichier) )
    	{
    		die('Fichier introuvable');
    	}
    Pourrait etre plus sécurisé déja.

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 327
    Points : 15 670
    Points
    15 670
    Par défaut
    Citation Envoyé par Korko Fain
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        // Dossier où se trouvent les fichiers à télécharger
        $dir = './upload/';
     
        $fichier = basename($_GET['fichier']);
     
        if( ! file_exists($dir.$fichier) )
        {
            die('Fichier introuvable');
        }
    Pourrait etre plus sécurisé déja.
    ce test ne sécurise pas le téléchargement, j'ai mis des explications là : http://www.developpez.net/forums/sho...86#post1563286

  6. #6
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    L'appel à la fonction basename() permet de ne prendre que le nom du fichier et pas l'arborescence passée en paramètre. Et donc meme si tu rentre ../../../config/config.php

    Il ne prendra que config.php.

    Ainsi, c'est plus sécurisé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 16
    Dernier message: 17/09/2010, 11h38
  2. Comment permettre le téléchargement d'un document
    Par badack dans le forum ASP.NET
    Réponses: 1
    Dernier message: 20/11/2008, 10h55
  3. Réponses: 1
    Dernier message: 16/06/2008, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo