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
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
Bonjour reeda,
Moi je fais comme ça:et ça marche nickel.
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;">
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
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.
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 ?
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.Si c'est un document .doc ou .pdf je ne vois pas le rapport de la sécurité ici!
Merci d'avance
Bien cordialement
Bonjour reeda,
Je vois ce que tu veux faireet 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.
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 :Cela force le téléchargement du fichier DUC.pdf
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; }
Dans mon contrôleur j'ai fais ça:Et ça marche bien.
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; } }
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.
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
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, 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
Bonjour reeda,
Comme ça:tu met ce code dans ton action.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $this->_helper->layout->disableLayout();
Cordialement,
Ahmed.
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.
Partager