[Résolu] Pas de téléchargement de fichier PDF ou ODT

Bonjour,

J’ai un comportement différent de mon site en local ou lorsqu’il est sur internet.
Voilà le code en question:

Lorsque j’ai cette page en local et que je clique sur le logo, le fichier Abonnement se télécharge. C’est le comportement qui me convient.
La même page sur internet, et le fichier PDF est visualisé sous Firefox.
J’ai le même type de lien avec un fichier .odt, et là l’explorateur boucle indéfiniment sans l’afficher.

Pourquoi une telle différence de comportement entre la page en local et celle sur le serveur ? Et pourquoi une différence de comportement entre le .odt et le .pdf ?

Pour forcer le téléchargement, j’ai cru comprendre qu’il fallait écrire une fonction PHP. Est-ce réellement le cas ?

D’avance merci pour vos réponses.

Hello,

Je suppose que c’est lié à la manière de traiter certains types de fichiers (MIME), et que ceci doit être configuré dans le php.ini. Tu as accès au tiens en local, mais tu ne peux bien sûr pas changer celui qui est en ligne sur du mutualisé. Par contre, tu peux mettre des directives dans un fichier .htaccess à la racine de ton espace: je me renseignerais de ce côté.

En ce qui concerne le traitement de certains types de fichiers, à ma connaissance on associe une extension à un type (p.ex. ce qui se termine par .pdf est associé à application/pdf), et c’est ensuite ton client qui décide comment est géré application/pdf (l’afficher à l’intérieur du navigateur, p.ex.). Si l’association n’est pas faite (ce qui pourrait être le cas chez toi en local), l’extension n’est alors pas reconnue et le comportement par défaut est donc de proposer de télécharger ce fichier. Je ne sais pas si on peut supprimer une association dans un .htaccess, mais il semble que pour forcer le téléchargement, on peut y associer le type MIME “application/octet-stream”. Essaie de mettre par exemple dans un .htaccess (à la racine de ton site) la directive suivante:

et regarde ce qui se passe…

Coop,
Greg

Grillé par Matthieu, qui a fait une réponse bien plus complète et plus pertinente :wink:

Bonjour,

La différence de comportement entre votre site local et celui en ligne, et entre les fichiers ODT et PDF, est probablement due à une configuration différente des serveurs.

Vous pouvez, dans le fichier .htaccess, ajouter les lignes suivantes :

<FilesMatch ".(pdf|odt)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>

Pour forcer le téléchargement des fichiers PDF et ODT.
Mais cette méthode n’est pas toujours efficace.

Firefox vient juste, dans sa version 19, d’intégrer un lecteur PDF, et les lignes ci-dessus dans le .htaccess ne semble pas marcher.

De chez moi avec Firefox, le fichier ODT est téléchargé, le fichier PDF est lu dans Firefox. Et avec Chrome, les deux fichiers sont téléchargés.

Une autre solution avec PHP consiste à créer un fichier nommé par exemple downloadpdf.php contenant ceci :

<?php
header('Content-disposition: attachment; filename=Abonnement.pdf');
header('Content-type: application/pdf');
readfile('Abonnement.pdf');
?> 

Puis à transformer le lien dans votre code HTML ainsi :

<a href="<?php echo $cheminRel; ?>documents/downloadpdf.php"><img class="logo-fichier" src="<?php echo $cheminRel; ?>illustrations/logos/logo-PDF" alt="" title="Formulaire d'abonnement au format PDF"></a>

Je n’ai pas essayé, à tester ! :slight_smile:

Ahah, me voilà quelques minutes après maintenant. :slight_smile:

Cordialement,

Merci à tous les deux pour vos réponses.

Je viens de faire l’essai avec la solution proposée par Mathieu qui consiste à modifier le .htaccess

Désormais cela fonctionne correctement; les deux fichiers sont proposés au téléchargement, y compris avec Firefox 19.0, qui sans la modification, proposait effectivement une visualisation du fichier PDF.

Nickel donc. Merci bien.