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'une image avec la fonction header() via une méthode de classe


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Février 2012
    Messages : 69
    Points : 60
    Points
    60
    Par défaut Téléchargement d'une image avec la fonction header() via une méthode de classe
    Bonjour,

    Je souhaite tout simplement faire en sorte que l'utilisateur de mon site puisse télécharger une image, sans passer celle-ci dans un href.

    La première technique que j'ai mise en place est la suivante :
    - Au lieu de passer directement le chemin de l'image dans mon href, j'appelle un fichier php.
    - Dans ce fichier php, je force alors le fichier à se télécharger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
     
        header('Content-Type: image/jpg');
        header('Content-Disposition: attachment; filename="344.jpg"');
        readfile($_SERVER["DOCUMENT_ROOT"] . "/3M/photos/344.jpg");
     
    ?>
    Avec ce bout de code, tout fonctionne très bien.

    La technique que je veux maintenant mettre en place est la même, mais je souhaite simplement mettre ce bout de code dans une méthode de ma classe.
    Mais, comment écrire mon code dans cette métohde pour que le téléchargement puisse se faire correctement ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
    class FilesController extends Controller
    {
        public function download()
        {    	
        	header('Content-Type: image/jpg');
       	header('Content-Disposition: attachment; filename="344.jpg"');
       	readfile($_SERVER["DOCUMENT_ROOT"] . "/photos/344.jpg");
        }
    }
     
    ?>
    J'aimerais avoir quelque chose comme cela.
    Je sais qu'il y a une histoire comme quoi il ne faut rien d'autre du tout dans le flux d'affichage avant les fonctions header().
    Mais du coup je ne sais pas comment "libérer" ce flux. J'ai essayé avec des ob_start(), ob_end_clean(), ..., mais n'étant pas encore trop à l'aise avec tout ça, je ne parviens pas à mettre en place quelque chose de fonctionel.

    Merci beaucoup d'avance

    Nicolas

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Bonjour,

    Essaie comme ça. Bien entendu à adapter en fonction de ton besoin.
    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
    <?php 
    class toto 
    {
        public function download($filename)
        {    	
          header('Content-Type: image/jpg');
          header("Content-Disposition: attachment; filename='$filename'");
          //readfile($_SERVER["DOCUMENT_ROOT"] . "/photos/344.jpg");
          readfile($filename);
        }
    }
     
    $a = new toto();
    $a->download('saitek psr 98.jpg');
     
    ?>
    Pour que cela fonctionne, aucun caractère ne doit être envoyé avant le header.
    Essaie le script en t'assurant que le < de <?php se trouve sur le premier caractère de la première ligne. Mets un fichier jpg dans le même répertoire que le script et passe le nom du fichier en paramètre. Puis ajoute un espace devant <?php et tu comprendras.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

Discussions similaires

  1. Réponses: 24
    Dernier message: 14/03/2015, 09h09
  2. Une image en session ou comment renvoyer une image sur une page
    Par a tunar with no tune dans le forum Spring
    Réponses: 1
    Dernier message: 26/01/2012, 09h02
  3. Réponses: 3
    Dernier message: 18/11/2011, 10h19
  4. Réponses: 4
    Dernier message: 17/08/2009, 13h19
  5. Réponses: 9
    Dernier message: 23/02/2008, 08h07

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