10
votes

En utilisant php pour forcer Télécharger un PDF

im essayant d'obtenir un site Web pour avoir un bouton qui oblige un téléchargement d'un fichier PDF.

Heres Le HTML du bouton: P>

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


5 commentaires

Envelopper une balise d'entrée dans une balise de liaison est impair


Très probablement, quelque chose provoque la sortie de la production d'une teneur en PDF non valide .. Peut-être que le serveur jette une erreur. Essayez d'ouvrir le fichier de résultat dans un éditeur de texte


Ahh je n'ai pas remarqué que, j'avais fait ça pour un autre lien mais je n'ai pas remarqué que j'ai encore eu que


Avez-vous essayé de comparer les fichiers source et téléchargé?


Assurez-vous qu'il n'y a pas d'espaces de fin après le ?> , qui ferait partie du téléchargement. En fait, éliminer le ?> entièrement, cela devient un non-problème.


5 Réponses :


5
votes

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

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


0 commentaires

2
votes

Avez-vous essayé de vous débarrasser de la balise PHP de fermeture (la?>) à la fin? Il traitera de la page en tant que page PHP pure, en supprimant les nouvelles lignes éventuelles pouvant être accidentellement annexées à la fin de la sortie. Cela m'a aidé quand je crée de manière dynamique des fichiers Excel au téléchargement, et ils ont été téléchargés comme corrompus. Découvrez cette page pour plus d'informations:

http://www.php.net/manual/ EN / LANGUE.BASIC-SYNTAX.PHPTAGS.PHP

de votre question modifiée, il semble que PHP ne puisse pas trouver le fichier. Essayez d'utiliser un chemin absolu vers le fichier comme si: "C: \ bla \ de \ blah \ bloo.pdf" ou "c: /blah/de/blah/blo.pdf". Si l'une de ces chemins fonctionne et télécharge correctement, votre chemin relatif est incorrect d'une manière ou d'une autre.


3 commentaires

C'est quelque chose que je ne savais pas, je pensais que tu devais toujours les fermer, mais cela ne résout pas le problème malheureusement


Essayez un chemin absolu dans l'appel ReadFile (): "C: /HTML/Downloads/ecm_it_resumedownload.pdf" ou autre.


Hoora! Pas de problème, passez une bonne nuit :)



0
votes

J'utilise toujours le script de téléchargement de Gowon Patterson, il a également une protection HOTLINK: http://by.gowondesigns.com/gefile/


0 commentaires

25
votes
$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);

1 commentaires

> en-tête ("Contenu-disposition: pièce jointe; nom_fichement =". $ PDFName); Je vous recommanderais également que vous le feriez simplement au cas où ... urlencode ($ pdfname)



0
votes

Au fait, un peu en retard, mais pour identifier le problème correctement 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 lishfile () doit être traversée dans le répertoire parent (en dehors des scripts ), par exemple. ReadFile ('../ Documents / [...]. PDF'); .


0 commentaires