Claudia: Problem beim Download einer PDF Datei

Hallo !

ich habe eine gültige PDF Datei auf meinem Webspace liegen. Diese wollte ich mit folgendem Codeschnipsel von php.net zum Download anbieten:

  
<?php  
// Wir werden eine PDF Datei ausgeben  
header('Content-type: application/pdf');  
  
// Es wird downloaded.pdf benannt  
header('Content-Disposition: attachment; filename="downloaded.pdf"');  
  
// Die originale PDF Datei heißt original.pdf  
readfile('original.pdf');  
?>  

Leider erhalte ich hier die Meldung "Datei kann nicht geöffnet werden oder ist falsch kodiert". In wiefern habe ich Einfluss darauf ? Die Site, um die es geht ist jedenfalls UTF-8 kodiert. Hat jemand einen Tipp für mich ?

Vielen Dank !

  1. header('Content-type: application/pdf');

    Und du bist dir sicher, dass dieser MIME-Type stimmt?

    1. Und du bist dir sicher, dass dieser MIME-Type stimmt?

      Sagen wir mal ehrlicherweise so ... ich kenne mich mit MIME Typen nicht besonders aus, bin mir aber sicher dass ich es richtig von php.net übernommen (und mittlerweile http://de.selfhtml.org/diverses/mimetypen.htm@title=nachgelesen) habe.

      Die Datei auf dem Server ist auch definitv eine gültige PDF Datei (falls Du das meinst).

      1. Die Datei auf dem Server ist auch definitv eine gültige PDF Datei (falls Du das meinst).

        Ich meinte damit, dass eine PDF-Datei nicht unbedingt application/pdf sein muss - es gibt auch gzip-komprimierte PDF-Files. Deren MIMI-Type ist z.B. application/x-gzpdf. Aber auch andere Komressionsverfahren existieren bzip2 z.B.

        1. Aha vielen Dank ... wie kann ich das erkennen ? Es ist eine generierte PDF Datei, die mit DOMPDF erstellt wurde. x-gzpdf und x-pdf gingen leider auch nicht. hast du noch einen tipp zum debuggen für mich ? danke dir !

  2. Hallo Claudia,

    Die 3 Zeilen PHP sind korrekt. Bei mir funktioniert es problemlos.
    (Allerdings mit einem PDF, das ich in Open Office hergestellt habe.)
    Firefox und IE öffnen die Auswahl "Öffnen oder Speichern", und
    mit beiden Varianten kann der aktuelle Adobe Reader 9.3.0 das PDF
    problemlos anzeigen. (Ältere Adobe Reader sollte man sowieso nicht
    mehr verwenden, da sie - bei eingeschaltetem JavaScript - eine
    gefährliche Sicherheitslücke haben.)

    Ich kann Dir nur ein paar Tips zum Debuggen geben:

    1. Ist die PDF-Datei an sich, so wie sie auf dem Server liegt,
    d.h. wenn man sie direkt per HTTP abruft oder per FTP herunterlädt,
    wirklich korrekt?

    2. Welche HTTP-Header sendet das PHP-Skript?
    Das kannst Du z.B. mit dem HTTP Head Service des W3C überprüfen.
    Bei mir sieht die Ausgabe so aus:

    200 OK
    Content-Disposition: attachment; filename="downloaded.pdf"
    X-Powered-By: PHP/5.2.12
    Server: Apache/2.2.13 (FreeBSD) mod_hcgi/0.7.1 mod_ssl/2.2.13 OpenSSL/0.9.8k DAV/2
    Connection: close
    Date: Mon, 01 Feb 2010 22:00:09 GMT
    Content-Type: application/pdf

    3. Wenn Du die Datei direkt herunterlädst und wenn Du sie
    über das PHP-Skript herunterlädst: Sind die Dateien identisch?
    (insbesondere: gleich viele Bytes gross?)

    4. Öffne die (über das PHP-Skript) heruntergeladene Datei mal
    mit einem sogenannten Hex-Viewer/Hex-Editor.
    Alternativen:
    Falls Du IrfanView hast: Datei -> Öffnen als -> HEX Datei.
    Oder einfach die Datei umbenennen in downloaded.txt und
    dann mit Notepad/Editor oder WordPad öffnen.
    Am Anfang der Datei sollte so etwas stehen wie:
    %PDF-1.4%

    Ich hoffe, etwas davon hilft Dir weiter!
    Melde Dich doch mit den Resultaten, danke.

    Freundliche Grüsse, Thomas

  3. Hi,

    Leider erhalte ich hier die Meldung "Datei kann nicht geöffnet werden oder ist falsch kodiert".

    Nur mit dem IE, oder auch mit richtigen Browsern?

    In wiefern habe ich Einfluss darauf ?

    Die Probleme des IE in Verbindung mit per PHP dynamisch ausgelieferten PDFs sind bekannt; der benötigt idR. noch zusätzliche Angaben bspw. zum Caching, damit er das vernünftig handeln kann.
    Suchmaschine hilft weiter.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]