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

PHP & Base de données Discussion :

Téléchargement d'un fichier via PHP & MySQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 40
    Points
    40
    Par défaut Téléchargement d'un fichier via PHP & MySQL
    Bonjour à tous,

    Je suis débutant en PHP et je n'arrives pas à télécharger un fichier.

    Je m'explique, j'ai une table qui référence chaque fichier uploadé (nom,chemin,id). J'ai crée une page PHP qui prend la valeur du GET, intérroge la base de données et télécharge le fichier correspondant.

    Voici mon code :

    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
    21
    22
    23
    24
    25
    26
    27
    <?php
    require "ressources\connexion_db.php";
    if($_GET["id"]) {
     
    	ob_clean(); // Vide le buffer (v >= 4.2)
       _connect();
    	$sqlRequest = "SELECT chemin, nom_fichier FROM `test`.`fichier`
    					WHERE id = '".$_GET["id"]."'
    					;";
     
    	$res = mysql_query($sqlRequest)or die("Erreur");
    	while($data = mysql_fetch_array($res)){
    		echo $data['chemin']; // Affiche : http://monsite.fr/un/dossier/
    		echo $data['nom_fichier']; // Affiche : nomdefichier.doc
    	}
    	_disconnect();
     
       // Dialogue de téléchargement
    	header("Content-Disposition: attachment; filename=".$data['nom_fichier']);
    	header("Content-Type: application/force-download"); 
    	header("Content-Length: ".filesize($data['chemin'] . $data['nom_fichier'])); 
    	header("Content-Transfer-Encoding: fichier\n");
    	flush(); // Envoie le buffer
     
    	readfile($data['chemin'].$data['nom_fichier']); // Envoie le fichier
     
    }?>
    Le problème est que cela un fichier nommé "download.php" avec le chemin et le nom du fichier que je souhaite télécharger.
    Je ne dois pas etre bien loin de la solution...

    Merci d'avance pour votre aide

  2. #2
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 199
    Points : 148
    Points
    148
    Par défaut
    Tu ve le proposer au telechargement en fait ?
    Que l´utilisateur puisse cliquer pour le telecharger ?

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 40
    Points
    40
    Par défaut
    Oui c'est exactement ça. Mais je ne veux pas de lien direct vers mon fichier.

  4. #4
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 199
    Points : 148
    Points
    148
    Par défaut
    Hum pas de liens direct.
    Explique moi un peu plus
    Sinon si tu as le chemin vers ce fichier.
    un bon vieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="monfichier.doc">telecharger</a>

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 40
    Points
    40
    Par défaut
    Voila ce que je voudrais éviter. Le bon vieux lien en dur.

    En faite je voudrais pouvoir télécharger le fichier concerné par l' "id" sans que les visiteurs ne puissent avoir accès au chemin complet du document (pour des raisons de sécurité).

    J'espère être un peu plus clair...

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 199
    Points : 148
    Points
    148
    Par défaut
    C´est meme translucide !
    Et si tu cache ce lien, en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href=$monlien></a>
    Juste une idée

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 40
    Points
    40
    Par défaut
    Je vais peut etre passer pour un gars chiant mais je ne souhaite meme pas faire de lien. Je voudrais que seul le code php puisse faire télécharger le document voulu. En gros que cela affiche directement la popup "Ouvrir le fichier avec : " et "Enregistrer sur le disque"

    PS : J'arrive à y faire quand le fichier à télécharger est dans le meme dossier que ma page PHP

  8. #8
    Membre habitué
    Inscrit en
    Septembre 2007
    Messages
    199
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 199
    Points : 148
    Points
    148
    Par défaut
    ba alors tu es pret de la reponse !
    Il faut que tu trouves ou mettre le chemin dans ton code et c´est bon non ?

  9. #9
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 40
    Points
    40
    Par défaut
    Oui voila...
    Mais j'arrive pas à le faire passer ce chemin.
    Et je vois pas où le mettre la dedans.

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 64
    Points : 40
    Points
    40
    Par défaut
    Voila je viens de trouver.
    Merci à toi juju03.

    Je mets mon code au cas où cela pourrait aider quelqu'un :

    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
    21
    22
    23
    24
    25
     
    <?php
    require "ressources\connexion_db.php";
    if($_GET["id"]) {
     
    	ob_clean(); // Vide le buffer (v >= 4.2)
       _connect();
    	$sqlRequest = "SELECT chemin, nom_fichier FROM `test`.`fichier`
    					WHERE id = '".$_GET["id"]."'
    					;";
     
    	$res = mysql_query($sqlRequest)or die("Erreur");
    	while($data = mysql_fetch_array($res)){
    		echo $data['chemin']; // Affiche : http://monsite.fr/un/dossier/
    		echo $data['nom_fichier']; // Affiche : nomdefichier.doc
     
    	   // Dialogue de téléchargement
    		header("Content-Disposition: attachment; filename=".$data['nom_fichier']);
    		header("Content-Type: application/force-download"); 
    		header("Content-Length: ".filesize($data['chemin'] . $data['nom_fichier'])); 
    		header("Content-Transfer-Encoding: fichier\n");
    		header("Location:".$data['chemin'].$data['nom_fichier']);
    	}
    	_disconnect();
    ?>

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 09/09/2013, 14h23
  2. IE + SSL + Génération de fichiers via php
    Par cedrick21 dans le forum Langage
    Réponses: 3
    Dernier message: 08/10/2012, 10h44
  3. [MySQL] Formatage d'un xml via PHP et mysql
    Par Daroob dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/12/2009, 21h03
  4. [FTP] upload de fichiers via PHP
    Par r-zo dans le forum Langage
    Réponses: 7
    Dernier message: 02/01/2006, 15h29

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