Nom de fichier au téléchargement - PHP - Programmation
Marsh Posté le 16-10-2007 à 10:22:33
bonjour,
euh basename()
http://fr3.php.net/manual/fr/function.basename.php
ça t'irais pas?
Marsh Posté le 16-10-2007 à 10:28:10
Le nom du fichier je le connais.
Mon soucis, c'est que dans la boite de dialogue de téléchargement de fichier, le nom de fichier par défaut qui est entré par IE ou Firefox, est l'url et non le nom réèl du fichier. Ce qui n'est pas très 'user friendly'...
Marsh Posté le 16-10-2007 à 10:29:24
ah ok désolé j'avais pas compris ça ...
Fait une recherche sur le forum il me semble qu'il y à déjà eu quelques topics parlant de ça ..
Marsh Posté le 16-10-2007 à 11:52:51
Effectivement ce soucis a été soulevé une ou deux fois, mais aucune réponse :s
Marsh Posté le 16-10-2007 à 14:55:00
Normallement, en utilisant les en-têtes http, ça devrait le faire. J'envoie ça :
Code :
|
Marsh Posté le 16-10-2007 à 15:37:45
tpierron a écrit : Normallement, en utilisant les en-têtes http, ça devrait le faire. J'envoie ça :
|
2 possibilités pour enregistrer un document pdf:
- Par le navigateur : Fichier -> enregistrer sous
- Par le plugin Adobe reader intégré à la page : bouton 'Enregistrer une copie [tite disquette]'
Manifestement, le header 'Content-Disposition: inline; filename=....' fait bien ce que je veux,
malheureusement, ça ne fonctionne que si l'on télécharge par le navigateur, et uniquement sur Firefox
Tout le monde s'en doute, mais je le dis quand même, la majorité des utilisateurs seront sur MSIE
Voici concrètement mon code PHP:
Code :
|
Marsh Posté le 16-10-2007 à 16:29:12
Effectivement, je n'ai pas testé avec le plugin Acrobat Reader (j'utilise Foxit, acroread est vraiment trop B.L.O.A.T.). Cela dit, avec IE7, j'ai bien le nom du fichier (preview.pdf) qui s'affiche et non le CGI. Pourrais-tu faire un dump de l'entête HTTP qui est effectivement envoyé (firebug sait faire ça).
Sinon, pour les navigateurs recalcitrant, il faut passer par de l'URL rewriting (mod_rewrite sous Apache). Genre, tu te démerdes pour que le nom du fichier apparaîsse dans le dernier composant d'une URL.
Puis tu réécris cette URL en ce que tu veux via une RewriteRule. Ça force à croire que le fichier s'appelle "nom_du_fichier.pdf". Cela dit, c'est BoUrRiN et casse gueule, j'essaierais de faire fonctionner la méthode avec les entêtes http.
Marsh Posté le 16-10-2007 à 16:41:59
Request Header:
Code :
|
Response Header:
Code :
|
Si tu connais un plugin pour avoir les headers sur MSIE, je veux bien j'utilise 'IE Developper Toolbar', mais il n'a pas cette fonction.
Je développe l'intranet avec Zend Framework, qui fait déja de l'url rewriting.
L'url est de type "module/fichierphp/fonctionphp?file=path/to/file.pdf"
exemple:
http://intradev.XXXXX.be/intra/Fil [...] e?file=...
"path/to/file.pdf" est un chemin relatif au dossier contenant les PDF.
d'où mon code PHP
Code :
|
Marsh Posté le 16-10-2007 à 17:15:27
Euh, je vois quelques erreurs dans l'entête http (Response header - request on s'en fout). Primo, je pense que tu as fais un copier coller de Firebug, d'où l'absence des ":". En fait on s'en fout aussi d'où l'entête a été récupéré, puisqu'il est généré coté serveur, que ce soit IE ou FF, ça devrait être la même chose. C'est juste un peu difficile à lire.
Deuxio, pour le paaramètre "Content-Disposition:" il manque un ; à la fin du nom de fichier (avant size=...).
Sinon, je ne pense pas que ça influ, mais rajoute toujours un petit "Content-Length" (même valeur que size).
Marsh Posté le 17-10-2007 à 08:31:43
tpierron a écrit : Euh, je vois quelques erreurs dans l'entête http (Response header - request on s'en fout). Primo, je pense que tu as fais un copier coller de Firebug, d'où l'absence des ":". En fait on s'en fout aussi d'où l'entête a été récupéré, puisqu'il est généré coté serveur, que ce soit IE ou FF, ça devrait être la même chose. C'est juste un peu difficile à lire. |
Oui j'utilise Firebug ^^, désolé pour les ':'
Mon entête est plus propre, mais rien n'a bougé au niveau de mon soucis
Header:
Code :
|
La syntaxe au niveau de filename="xxx.pdf" est correcte ? (double quote, espace ?)
Il n'y aurait pas un header qui permette de définir un titre pour la page ?
IE et FF ne l'interprète p-e pas de la même façon, ou ne l'encode pas de la même façon...
(j'ai déjà eu un soucis d'encodage de la source JS sur IE, qui faisait bug mon script à cause d'un accent dans un commentaire...)
Marsh Posté le 17-10-2007 à 16:09:28
Rhââaa, mais c'est pas possible. Que le plugin acrobat ne prenne pas en compte le Content-disposition, ça me paraît normal (le flux http est transmis au plugin). Mais IEv7 (la version que j'ai) devrait en tenir compte.
Ça c'est l'entête que j'ai envoyé au navigateur :
Content-Length: 333773 |
Dans Foxit avec FF, le nom du fichier était bien "10.2 Procedure en cas d'incendie.pdf". Avec IE7, j'avais "10.2_Procedure_en_cas_d'incendie.pdf". Mon CGI s'appelle "/cgi-bin/planner".
Pour l'encodage, normallement tu peux rajouter "; charset=XYZ" à la fin de Content-Type. Cela dit, je ne suis pas sûr que ça s'applique à l'entête HTTP. Le plus sûr étant de se limiter à du us-ascii (dans l'entête). Sinon les JS sont supposés avoir le même encodage que la page HTML (Content-Type de la requète http ou balise meta http-equiv).
Désolé, je sèche
Marsh Posté le 11-03-2009 à 11:39:49
Bonjour,
je relance le sujet car il n'est pas résolu et je rencontre le même problême en java.
Dans mon cas le ftp n'est pas envisageable.
Je pointe vers un serveur Tomcat avec des paramètres. Le serveur retourne un pdf qui doit s'ouvrir dans le navigateur à l'aide du plugin adobe.
Lorsque je veux enregistrer le fichier, le nom proposé est celui de l'URL. Pourtant le filename arrive bien dans le Header.
Je n'ai pas le problème quand je déclenche le choix "ouvrir,enregistrer, annuler" avec le paramètre "attachment" dans le header "Content-Disposition"
L'Url rewriting ne semble pas non plus répondre à mon besoin puisqu'il se paramètre dans du xml, or moi j'ai le nom du fichier en dynamique dans mon code java.
merci
Barny
Marsh Posté le 16-10-2007 à 10:19:58
Bonjour,
Voici en deux mots la situation:
Je développe actuellement un intranet dans lequel nous mettons à disposition de l'utilisateur, des documents PDF.
l'arborescence est la suivante :
Les url de développement et de production pointent respectivement sur les dossier Dev et Prod.
Le dossier contenant les PDF n'étant donc pas sous la racine, je ne peux faire de lien directe.
Le but premier est de permettre la visualisation des PDF, et au besoin de les télécharger.
Pour la visualisation, aucun soucis. J'utilise la fonction PHP 'readfile()', avec un header(' Content-type: application/pdf').
Mon problème vient lorsque l'on veut télécharger le fichier.
Le nom qui est par défaut, est l'url de la page PHP qui ouvre le fichier. C'est un peu logique en soi, mais il serait mieux que ce soit le nom du fichier qui s'y retrouve.
Seulement, je ne trouve pas comment lui passer cette information. Je n'ai pas trouvé de header qui corresponde à ça, ni d'autre fonction PHP qui ferait ceci.
Le seul header permettant de nommer le fichier, que j'ai trouvé est
'Content-Disposition: attachement; filename= ...'
Mais il force le téléchargement, ce qui ne me convient pas.
Je solicite donc votre connaissance sans doute plus avancée que la mienne pour ceci
Merci d'avance
L'intranet tourne sur un serveur Linux, avec PHP 5.2 et est développé avec le Framework de Zend.