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

Zend Framework PHP Discussion :

Lancer le téléchargement d'un fichier automatiquement


Sujet :

Zend Framework PHP

  1. #1
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut Lancer le téléchargement d'un fichier automatiquement
    Bonjour tout le monde,

    j'espère que vous allez tous très bien,
    J'ai un fichier sur le serveur dont je voudrais lancer le téléchargement à partir du controleur,

    mais j'arrive pas à trouver une solution

    Merci d'avance
    Bien cordialement

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingenieur BI - Dev Web Senior
    Inscrit en
    Décembre 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingenieur BI - Dev Web Senior

    Informations forums :
    Inscription : Décembre 2009
    Messages : 118
    Par défaut
    Bonjour reeda,

    Moi je fais comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a target="link" href="/images/manuels/EC122.pdf" class="btn_modem_detail" style="margin-top: 80px;">
    et ça marche nickel.

    NB: Dossier "images" existe dans le dossier "public".

    Cordialement,
    Ahmed.

  3. #3
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut
    Citation Envoyé par abenlahsen Voir le message
    Bonjour reeda,

    Moi je fais comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a target="link" href="/images/manuels/EC122.pdf" class="btn_modem_detail" style="margin-top: 80px;">
    et ça marche nickel.

    NB: Dossier "images" existe dans le dossier "public".

    Cordialement,
    Ahmed.
    Bonjour abenlahsen,

    merci pour ta réponse rapide,
    le problème c'est que le fichier que je voudrais mettre mettre en téléchargement, ne se trouve pas dans le dossier public, du coup ceci pourrait poser un problème de sécurité.

    je ne sais pas s'il existe une autre solution !!

    Merci d'avance
    Bien cordialement

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingenieur BI - Dev Web Senior
    Inscrit en
    Décembre 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingenieur BI - Dev Web Senior

    Informations forums :
    Inscription : Décembre 2009
    Messages : 118
    Par défaut
    Bonjour,

    Pour moi si je veux permettre aux internautes de télécharger un fichier je le métrais dans le dossier public.
    Sinon ça ne va pas marcher pour moi!

    Si c'est un document .doc ou .pdf je ne vois pas le rapport de la sécurité ici!

    Cordialement,
    Ahmed.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Par défaut
    Bonjour,

    Si le fichier n'est pas dans le dossier public il est tout à fait possible d'y accéder à partir d'un contrôleur.

    Il suffit que le serveur ait les droits de lecture au fichier en question pour le renvoyer en réponse à la requête http. (ta vue correspondra à l'envoi du contenu du fichier pdf au lieu d'un contenu html)

    Y.

  6. #6
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut
    Citation Envoyé par devyan Voir le message
    Bonjour,

    Si le fichier n'est pas dans le dossier public il est tout à fait possible d'y accéder à partir d'un contrôleur.

    Il suffit que le serveur ait les droits de lecture au fichier en question pour le renvoyer en réponse à la requête http. (ta vue correspondra à l'envoi du contenu du fichier pdf au lieu d'un contenu html)

    Y.
    Bonjour,

    Comment pourrai-je faire cela ?
    Sinon, est ce que le fait que j'utilise un layout ne va pas poser problème ?

    Si c'est un document .doc ou .pdf je ne vois pas le rapport de la sécurité ici!
    C'est un fichier DBF (dbase), qui est alimenté par l'application, quelques utilisateurs de l'application auront le droit de télécharger ce fichier.

    Merci d'avance
    Bien cordialement

  7. #7
    Membre éprouvé
    Homme Profil pro
    Ingenieur BI - Dev Web Senior
    Inscrit en
    Décembre 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingenieur BI - Dev Web Senior

    Informations forums :
    Inscription : Décembre 2009
    Messages : 118
    Par défaut
    Bonjour reeda,

    Je vois ce que tu veux faire et la solution que j'ai donné ne marche pas!
    Je vais essayer de faire un exemple et si je réussi je te passe l'exemple.

    En attendons si tu trouve une solution, j'aimerais bien la savoir

    Cordialement,
    Ahmed.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Ingenieur BI - Dev Web Senior
    Inscrit en
    Décembre 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingenieur BI - Dev Web Senior

    Informations forums :
    Inscription : Décembre 2009
    Messages : 118
    Par défaut Forcer le téléchargement dans le contrôleur
    Bonjour reeda,

    Je reviens pour te donner une idée de solution.

    Dans ton action (dans le contrôleur), après vérification du droit de téléchargement du fichier tu force le téléchargement.

    L'exemple que j'ai fais :
    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
    $file = 'C:/xampp/htdocs/lucene/application/data/DUC.pdf';
     
            if (file_exists($file)) {
                header('Content-Description: File Transfer');
                header('Content-Type: application/pdf');
                header('Content-Disposition: attachment; filename='.basename($file));
                /*header('Content-Transfer-Encoding: binary');
                header('Expires: 0');
                header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                header('Pragma: public');*/
                header('Content-Length: ' . filesize($file));
                ob_clean();
                flush();
                readfile($file);
                exit;
            }
    Cela force le téléchargement du fichier DUC.pdf

    Dans mon contrôleur j'ai fais ça:
    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
    public function indexAction()
        {
            // Apres verification l'accès au telechargement du fichier tu ajoute ça
            $file = 'C:/xampp/htdocs/lucene/application/data/DUC.pdf';
     
            if (file_exists($file)) {
                header('Content-Description: File Transfer');
                header('Content-Type: application/pdf');
                header('Content-Disposition: attachment; filename='.basename($file));
                /*header('Content-Transfer-Encoding: binary');
                header('Expires: 0');
                header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
                header('Pragma: public');*/
                header('Content-Length: ' . filesize($file));
                ob_clean();
                flush();
                readfile($file);
                exit;
            }
        }
    Et ça marche bien.

    NB:
    - Si tu as remarqué mon fichier n'est pas dans le dossier public!
    - Pour plus d'info sur comment forcer le téléchargement d'un fichier RDV ici.

    J'espère que ma solution marchera bien pour toi

    Cordialement,
    Ahmed.

  9. #9
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut
    salam abenlahsen,

    Merci beaucoup pour ta réponse,
    ça marche super bien maintenant,
    j'avais trouvé la même solution, mais elle était incompléte, du coup, le fichier téléchargé récupère tout ce qu'il y a dans le layout

    merci encore une fois
    Bien cordialement

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par défaut
    Attention : si tu fais ça, tu ne respectes pas le MVC.
    Ce script doit se trouver dans une vue, pas dans le contrôleur. Il suffit ensuite de désactiver le layout, et le tour est joué.

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 132
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 132
    Par défaut
    Citation Envoyé par reeda Voir le message
    Bonjour,

    Comment pourrai-je faire cela ?
    Sinon, est ce que le fait que j'utilise un layout ne va pas poser problème ?


    C'est un fichier DBF (dbase), qui est alimenté par l'application, quelques utilisateurs de l'application auront le droit de télécharger ce fichier.

    Merci d'avance
    Bien cordialement
    Bonjour, désolé pour le délai.

    Ce que je voulais dire (et qui a été illustré dans une réponse depuis) est qu'il y a une différence entre les éléments qui sont accessibles par un lien direct (vu du poste client) et les éléments auxquels le code PHP peut accéder (sur le serveur)

    Dans la solution donnée c'est bien le contrôleur qui fournit le fichier pas le dossier public à partir d'un appel direct.

    devyan

  12. #12
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut
    Citation Envoyé par vg33 Voir le message
    Attention : si tu fais ça, tu ne respectes pas le MVC.
    Ce script doit se trouver dans une vue, pas dans le contrôleur. Il suffit ensuite de désactiver le layout, et le tour est joué.
    Bonjour,

    merci pour ta réponse,
    comment est ce qu'on pourrait désactiver le layout pour une action ?.

    Merci d'avance
    Bien cordialement

  13. #13
    Membre éprouvé
    Homme Profil pro
    Ingenieur BI - Dev Web Senior
    Inscrit en
    Décembre 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingenieur BI - Dev Web Senior

    Informations forums :
    Inscription : Décembre 2009
    Messages : 118
    Par défaut Désactiver le Layout pour une action
    Bonjour reeda,

    Comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->_helper->layout->disableLayout();
    tu met ce code dans ton action.

    Cordialement,
    Ahmed.

  14. #14
    Membre éclairé Avatar de reeda
    Formateur en informatique
    Inscrit en
    Août 2006
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 367
    Par défaut
    Citation Envoyé par devyan Voir le message
    Bonjour, désolé pour le délai.

    Ce que je voulais dire (et qui a été illustré dans une réponse depuis) est qu'il y a une différence entre les éléments qui sont accessibles par un lien direct (vu du poste client) et les éléments auxquels le code PHP peut accéder (sur le serveur)

    Dans la solution donnée c'est bien le contrôleur qui fournit le fichier pas le dossier public à partir d'un appel direct.

    devyan
    salut,

    Merci pour la réponse,
    Mais apparement ca ne respecte pas le MVC, du coup la solution donnée ne doit pas être mise dans le controleur

    Bien cordialement

  15. #15
    Membre éprouvé
    Homme Profil pro
    Ingenieur BI - Dev Web Senior
    Inscrit en
    Décembre 2009
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingenieur BI - Dev Web Senior

    Informations forums :
    Inscription : Décembre 2009
    Messages : 118
    Par défaut
    Bonjour,


    Je ne vois pas l'intérêt de respecter le MVC ici, car on a pas besoin d'afficher quelque chose !
    Ça serai le cas si on met "echo ....." dans le contrôleur! Mais le besoin est un peut spécifique dans ce cas.

    Si ma solution ne respect le MVC, j'aimerais bien avoir une autre mieux!


    Cordialement,
    Ahmed.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/04/2010, 11h50
  2. renseignement pour lancéer un fichier automatiquement tous les jours en bash
    Par sinifer dans le forum Applications et environnements graphiques
    Réponses: 20
    Dernier message: 09/06/2009, 13h31
  3. Réponses: 10
    Dernier message: 03/03/2009, 12h46
  4. [Javascript] Lancer le téléchargement d'un fichier
    Par HaTnuX dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/01/2007, 11h03
  5. Réponses: 11
    Dernier message: 25/05/2006, 12h42

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