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 :

Problème forcer téléchargement fichier


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut Problème forcer téléchargement fichier
    Bon j'essaie de forcer le téléchargement d'un fichier, contenu dans ma base de donnée mais je n'y arrive pas...

    voici ma page avec le lien et la connection à la base de donnée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php 
    include("connection.php"); 
    $query = "SELECT telechargement_donnee from donnee where id_donnee=217"; 
    $result = mysql_query($query) or die ('Erreur SQL !<br>'.mysql_error()); 
    $row=mysql_fetch_array($result); 
    $filname=$row["telechargement_donnee"]; 
    echo $filname; 
    $dir= "../site/"; 
    $chemin= "http://127.0.0.1/site/"; 
    ?> 
     
    <A href="ggggg.php?chemin=<?php echo $chemin; ?>&file=<?php echo $filname; ?>">telecharger
    voici ma page ggggg.php de telechargement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php 
    header("Content-type: application/force-download"); 
    header("Content-Disposition: attachment; filename=".$file); 
    readfile($chemin.$file); 
    ?>
    en fait quand je clique sur telecharger ca m'ouvre une fenetre où ca me donne la possibilité de télécharger le fichier... ggggg.php
    sinon quand je passe la souris sur le lien voici l'URL affichée en bas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://127.0.0.1/site/ggggg.php?chemin=http://127.0.0.1/site/&file=05.jpg
    merci de m'aider

  2. #2
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Voici un code que j'utilise et qui fonctionne nickel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $MimeType = "application/octet-stream";
    if ($navigateur!="Mozilla") {	//IE et Opéra ne supporte pas le type mime standard
    	$MimeType = "application/octetstream";
    }				
     
    header("Content-Disposition: attachment; filename=\"".$_GET['file']."\"");
    header("Content-Type: ".$MimeType."; name=\"".$_GET['file']."\"");
    header("Content-Length: ".filesize($chemin.$file));
     
    readfile($chemin.$file);
    Autre chose, as tu pensé à la faille de sécurité énorme que tu as ?
    Si j'appel cette url: http://127.0.0.1/site/ggggg.php?chem...motdepasse.php

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut
    Nikel ça marche...
    par contre j'ai enlevé ça:
    $MimeType = "application/octet-stream";
    if ($navigateur!="Mozilla") { //IE et Opéra ne supporte pas le type mime standard
    $MimeType = "application/octetstream";
    }
    je sais pas si ça a une grave conséquence...

    sinon pour ça:
    Autre chose, as tu pensé à la faille de sécurité énorme que tu as ?
    Si j'appel cette url: http://127.0.0.1/site/ggggg.php?chemin=http://127.0.0.1/fichierdemotdepasse.php
    oui je vois la faille mais que me conseilles tu?

  4. #4
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Citation Envoyé par cams
    oui je vois la faille mais que me conseilles tu?
    Bah il y a plein de solution,s c'est exactement le même principe que la faille include, tu trouvera plein d'infos sur le net.

    Mais une solution est de vérifier dans ta page ggggg.php que le fichier que tu t'apprete à ouvrir est bien un fichier autorisé.

    Si tu as quelques fichiers seulement à autoriser, c'est simple, tu peux faire ça à coup de switch / case.

    Sinon, tu dédie un répertoire où tous les fichiers contenu auront le droit d'être lus...

    Ya plein de soluce...

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut
    en fait c'est l'histoire de chemin relatif et absolu?? car sinon oui je met bien un chemin relatif mais c'était pour tester... mais je sais pas si ça qui te chagriné...

    là avec le chemin relatif quand tu passes la souris sur l'URL ca donne ca:
    http://127.0.0.1/site/ggggg.php?chemin=.../site/&file=05.jpg

  6. #6
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut
    ok faut que je regardes tout ça alors... (j'avais pas vu ton dernier post quand j'ai écri mon dernier message...)
    merci

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut
    par contre je t'avais dis que ca marchais mais en fait je retrouve pas mon fichier d'origine...
    genre mon fichier d'origine fait 1,21 mo et apres quand je le téélcharge il ne fait plus que quelques ko...

  8. #8
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    ca c est le filesize qui merdouille
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut
    Et qu'est ce qu'il faut faire alors?

  10. #10
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    verifier que ce que tu passes a filesize est le bon chemin vers ton fichier en le mettant dans un var_dump par exemple
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut
    j'obtiens ça:
    string(25) "../site/emploi_du_tps.xls" (pour un fichier excel)
    donc à priori c'est bon c'est le repertoire+le fichier...
    mais bon comprend pas que le fichier soit pas bon ensuite...

    pour ce fichier si j'ouvre le fichier ca marche nikel
    mais si je l'ouvre en le téléchargeant le fichier est erroné

  12. #12
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    essayes peut etre avec un chemin absolu
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  13. #13
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Essai de faire un echo filesize($chemin.$file); pour voir si le filesize fonctionne correctement...

  14. #14
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut
    non pareil
    avec le chemin relatif j'ai ça en passant la souris sur le fichier:
    http://127.0.0.1/site/ggggg.php?chemin=.../site/&file=nom_de_mon_fichier_avec_lextension

    ya rien d'anormal là?

  15. #15
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Dans l'exemple que tu donne, chemin commence par 3 points (.../)

  16. #16
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut
    en fait c'est bizarre...
    dans ma base j'ai un nom de fichier...
    pour le telechargement il prend le nom du fichier... mais il le fait meme s'il n'existe pas dans le répertoire... donc en fait si le nom dans la base est bonjour.xls beh il va m'ouvrir la boite de telechargement avec ecrit bonjour.xls meme si le fichier n'existe pas dans le repertoire ou devrait etre le fichier ....
    je sais pas si c'est clair

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut
    pour les 3pts c'est une erreur de frappe c'est bien 2 points je lavais réécrite c'est pour ca...

  18. #18
    Membre confirmé Avatar de GregPeck
    Inscrit en
    Novembre 2005
    Messages
    530
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 530
    Points : 540
    Points
    540
    Par défaut
    Pour ton problème de nom de fichier, c'est normal en fait:
    Dans ton header, tu précise "filename=", ca c'est le nom de fichier que tu vas donner à l'internaute et pas forcément le vrai nom de fichier.


    As tu essayer ça:
    Essai de faire un echo filesize($chemin.$file); pour voir si le filesize fonctionne correctement...

  19. #19
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut
    bon je te remets les codes car j'ai du mal:

    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
     
    <?php 
    include("connection.php");
    	$id2 = $_POST['id'];
    	echo $id2;
    $query = "SELECT telechargement_donnee from donnee where id_donnee='$id2'"; 
    $result = mysql_query($query) or die ('Erreur SQL !<br>'.mysql_error()); 
    $row=mysql_fetch_array($result); 
    $filname=$row["telechargement_donnee"]; 
    echo $filname; 
    $chemin= "../site/"; 
     
    if ($filname!='')
    {?>
    <A href="ggggg.php?chemin=<?php echo $chemin; ?>&file=<?php echo $filname; ?>">telecharger 
    <?
    }
    else
    echo "pas de telechargement pr ce fichier";
    ?>
    et celui de telechargement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     $MimeType = "application/octetstream";    
    header("Content-Disposition: attachment; filename=\"".$_GET['file']."\""); 
    header("Content-Type: ".$MimeType."; name=\"".$_GET['file']."\""); 
    header("Content-Length: ".filesize($chemin.$file)); 
    readfile($chemin.$file); 
    ?>

  20. #20
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 50
    Points : 12
    Points
    12
    Par défaut
    je recupere l'id d'une liste deroulante (d'un formulaire precedent...)
    et je prend le champ telechargement_donnee qui contient le nom du fichier associé à l'id...
    et donc ensuite sil y a bien un nom de fichier dans telechargement_donnee beh cela donne la possibilité de telecharger le fichier qui est dans "../site/"

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Webspère] Problème de téléchargement de fichier
    Par marsup54 dans le forum Apache
    Réponses: 4
    Dernier message: 09/01/2007, 15h30
  2. [VB.net] Problème de téléchargement de fichier
    Par darkmoon25 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 01/12/2006, 11h06
  3. problème de téléchargement de fichier
    Par mayssabac dans le forum Langage
    Réponses: 2
    Dernier message: 18/11/2006, 23h12
  4. [SQL] Forcer téléchargement : ènième problème
    Par fred23195 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 11/08/2006, 18h10
  5. Réponses: 5
    Dernier message: 05/11/2005, 17h53

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