web-dev-qa-db-fra.com

Utiliser php pour forcer le téléchargement d'un pdf

J'essaie de faire en sorte qu'un site Web ait un bouton qui force le téléchargement d'un pdf.

Voici le code HTML du bouton:

    <a href=scripts/download.php>
    <input type="image" src="images/download.gif" alt="Submit button"/>
    </a>

Et le script php jusqu'à présent:

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

Cela semble télécharger le fichier, mais quand je vais l'ouvrir, j'obtiens cette erreur:

"Adobe Reader n'a pas pu ouvrir 'documents_ECM_IT_ResumeDownload.pdf' car il ne s'agit pas d'un type de fichier pris en charge ou du fichier endommagé (par exemple, il a été envoyé en tant que pièce jointe et n'a pas été correctement décodé)."

Toute aide serait grandement appréciée.

EDIT Ouvre le pdf dans un éditeur de texte et reçoit le message suivant:

"
Attention: readfile (documents/ECM_IT_ResumeDownload.pdf) [function.readfile]: impossible d'ouvrir le flux: aucun fichier ou répertoire de ce type dans html/scripts/download.php en ligne 4
"

Le document est bien là cependant. en html/documents/ECM_IT_ResumeDownload.pdf

9
Craig Traynor

Avez-vous essayé de vous débarrasser de la balise de fermeture PHP à la fin? Elle traitera la page comme une pure page PHP, en supprimant les éventuelles nouvelles lignes susceptibles d'être accidentellement ajoutées à la fin de la sortie. Cela m'a aidé lorsque je créais dynamiquement des fichiers Excel à télécharger, et qu'ils téléchargeaient de manière corrompue. Consultez cette page pour plus d'informations:

http://www.php.net/manual/en/language.basic-syntax.phptags.php

D'après votre question modifiée, il semble que PHP ne parvienne pas à trouver le fichier. Essayez d’utiliser un chemin absolu vers le fichier tel que: "c:\blah\de\blah\bloo.pdf" ou "c: /blah/de/blah/bloo.pdf". Si l'un de ces chemins fonctionne et se télécharge correctement, votre chemin relatif est en quelque sorte incorrect.

2
abelito
$file_url = www.example.com/pdffolder/$pdfname;
header('Content-Type: application/pdf');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=".$pdfname);
readfile($file_url);
23
Mohammad Intsar

Essayez de supprimer le chemin du fichier et laissez simplement le nom du fichier dans le contenu:

header('Content-Type: application/pdf');
header('Content-disposition: attachment; filename=ECM_IT_ResumeDownload.pdf');
4
John Conde

J'utilise toujours le script de téléchargement de Gowon Patterson, qui dispose également d'une protection contre les liens hypertextes: Http://by.gowondesigns.com/getfile/

0
FluffyKitten

Au fait, un peu tard, mais pour bien identifier le problème ici:

Votre script de téléchargement est à scripts/download.php et le fichier que vous souhaitez télécharger est à documents/[...].pdf.

Par conséquent, votre fonction readfile() devrait être traversante vers le répertoire parent (en dehors de scripts/), par exemple. readfile('../documents/[...].pdf');.

0
M Miller