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 :

[HTTP] adresse dynamique : ne pas forcer le téléchargement


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut [HTTP] adresse dynamique : ne pas forcer le téléchargement
    Bonjour

    J'ai écrit une application PHP/MySQL qui permet l'envoi et le téléchargement de fichiers.
    Les fichiers sont enregistrés dans un répertoire upload et leurs noms dans le système de fichiers sont des hashs MD5.
    Une table SQL fait la correspondance entre le nom d'origine du fichier et son hash MD5.

    Le téléchargement se fait comme suit :
    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
     
    // $path = chemin réel vers le fichier, par exemple "./upload/69579997fcb45501ba1bb873a3c076b4"
    // $file['name'] = nom issu de la BDD, par exemple "pingouin.png"
    if (file_exists($path))
    {
        header('Content-Disposition: attachment; filename="'.$file['name'].'"');
        header('Content-Type: '.mime_content_type($path));
        header('Content-Transfer-Encoding: binary');
        header('Content-Length: '. filesize($path));
        header('Pragma: no-cache');
        header('Accept-Ranges: bytes');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Expires: 0');
        readfile($path);
        die();
    }
    else
    {
        // en erreur
    }
    Cela marche, mais le problème est que cela force le navigateur web à télécharger le fichier (ouverture d'une boîte de dialogue ouvrir avec / enregistrer sous ...)
    J'aimerais que le navigateur puisse décider de lui même de l'action à effectuer en fonction du type MIME du fichier (c'est à dire si c'est une image, l'afficher dans la page courante, si c'est un type non géré, le navigateur propose la boite de dialogue de téléchargement).

    Est-ce possible ? Si oui, comment ?

    Merci

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 391
    Points : 15 747
    Points
    15 747
    Par défaut
    tu peux faire ça en fonction de ce que retourne la fonction "mime_content_type"

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 181
    Points : 199
    Points
    199
    Par défaut
    Que la solution soit automatique ou non (gérer moi même les différents cas en fonction du type MIME), le problème reste le même pour moi : je ne sais pas quelles commandes HTTP je dois utiliser pour ne pas forcer le téléchargement.

    Dans l'exemple du premier post, il n'y pas d'URL réelle qui contiennent "pingouin.png", et de toute façon le client n'est pas censé avoir accès aux adresses avec les hashs MD5.
    Donc je ne sais vraiment pas comment faire... URL rewriting ?

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    je ne suis pas un spécialiste des en-têtes http, mais je pense que l'en-tête 'Content-Disposition: attachment;' est celle qui force le téléchargement. Essaie en la supprimant. Mais du coup, je ne sais pas si tu as un moyen de transmettre le nom du fichier...

Discussions similaires

  1. Forcer un téléchargement par URL dynamique
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 09/12/2007, 21h28
  2. Réponses: 2
    Dernier message: 30/11/2006, 18h06
  3. Réponses: 1
    Dernier message: 08/09/2005, 11h01
  4. Réponses: 2
    Dernier message: 23/03/2005, 08h51
  5. Frames : adresse ne change pas
    Par polo-j dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 14/02/2005, 16h56

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