it-swarm.com.de

Mit PHP das Herunterladen eines PDFs erzwingen

Ich versuche, auf einer Website einen Button zu haben, der das Herunterladen eines PDFs erzwingt.

Hier ist das HTML des Buttons:

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

Und das PHP-Skript bisher:

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

Dies scheint die Datei gut herunterzuladen, aber wenn ich sie öffne, bekomme ich diese Fehlermeldung:

"Adobe Reader konnte 'documents_ECM_IT_ResumeDownload.pdf' nicht öffnen, da es sich hierbei nicht um einen unterstützten Dateityp handelt oder die Datei beschädigt wurde (z. B. als E-Mail-Anhang gesendet und nicht korrekt decodiert wurde)."

Jede Hilfe wäre sehr dankbar.

EDIT Öffnet die PDF in einem Texteditor und hat folgende Meldung erhalten:

"
Warnung: readfile (documents/ECM_IT_ResumeDownload.pdf) [function.readfile]: Fehler beim Öffnen des Streams: Keine solche Datei oder Verzeichnis in html/scripts/download.php online 4
"

Das Dokument ist jedoch definitiv da. in html/documents/ECM_IT_ResumeDownload.pdf

9
Craig Traynor

Haben Sie versucht, das schließende PHP-Tag (the?>) Am Ende loszuwerden? Die Seite wird als reine PHP-Seite behandelt und alle möglichen neuen Zeilen entfernt, die versehentlich an das Ende der Ausgabe angehängt werden. Dies hat mir geholfen, als ich dynamisch Excel-Dateien zum Herunterladen erstellt habe und sie als beschädigt heruntergeladen wurden. Weitere Informationen finden Sie auf dieser Seite:

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

Aus Ihrer bearbeiteten Frage scheint es, als könnte PHP die Datei nicht finden. Versuchen Sie, einen absoluten Pfad zu der Datei zu verwenden, z. Wenn einer dieser Pfade ordnungsgemäß funktioniert und heruntergeladen wird, ist Ihr relativer Pfad in gewisser Weise falsch.

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

Entfernen Sie den Pfad zur Datei und belassen Sie den Dateinamen im Inhalt:

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

Ich verwende immer das Download-Skript von Gowon Patterson, es hat auch einen Hotlink-Schutz: http://by.gowondesigns.com/getfile/

0
FluffyKitten

Übrigens etwas spät, aber hier das Problem richtig zu erkennen:

Ihr Download-Skript befindet sich unter scripts/download.php und die Datei, die Sie herunterladen möchten, befindet sich unter documents/[...].pdf.

Daher sollte Ihre readfile()-Funktion in das übergeordnete Verzeichnis (außerhalb von scripts/) gelangen, z. readfile('../documents/[...].pdf');.

0
M Miller