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
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    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
    Membre confirmé
    Inscrit en
    Mars 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 56
    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 confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 660
    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 émérite 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
    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 confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 660
    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 émérite 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
    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