Martin: header / fpassthru

Hallo Leute,

ich möchte über ein Skript mittels header eine PDF-Datei downloaden:

<?php
require("../../../connect.php");

$filename = "ReferenzF-2083_2.pdf";

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Transfer-Encoding: binary");

$fp = fopen("$filename", "r");
fpassthru($fp);

?>

Anstelle des Downloadfensters erscheint die Datei jedoch mit lauter Hieroglyphen. Kann mir jemand sagen, wie ich das machen muss, damit ich die Datei downloaden kann?

Martin

  1. Hallo Martin,

    $fp = fopen("$filename", "r");
    fpassthru($fp);

    Probiers mal mit:
    readfile ($filename);

    anstatt den zwei zeilen oben.
    Good Luck
    Uli

    1. Good Luck
      Uli

      Danke, hat leider nichts gebracht, immer noch das gleiche Problem.

      Martin

  2. Hi,

    Anstelle des Downloadfensters erscheint die Datei jedoch mit lauter Hieroglyphen. Kann mir jemand sagen, wie ich das machen muss, damit ich die Datei downloaden kann?

    Runtergeladen wird es doch (sonst könnte es nicht angezeigt werden), nur macht der Browser nicht das, was Du willst (nämlich den Speichern unter-Dialog).
    Welcher Browser ist es denn?

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. Welcher Browser ist es denn?

      MS IE 6.0

      Grüsse

      Martin

  3. Moin Moin !

    header("Content-type: application/octet-stream");

    Falscher MIME-Type. Application/pdf ist für PDF-Dateien reserviert.

    header("Content-Disposition: attachment; filename=$filename");

    Laß die filename-Erweiterung weg ("Content-Disposition: attachment"), hänge stattdessen den gewünschten Namen an die URL an (http://www.example.com/php/download.php/superduper.pdf?action=getpdf&pdf=superduper). Das ist zwar nicht ganz so schön, funktioniert aber meiner Erfahrung nach besser.

    header("Content-Transfer-Encoding: binary");

    Was soll das? Ich halte die Angabe für unnötig.

    Alexander

    --
    Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"
    1. Moin Moin !

      header("Content-type: application/octet-stream");

      Falscher MIME-Type. Application/pdf ist für PDF-Dateien reserviert.

      Ich habe da das Problem, dass später verschiedene Dateitypen gedownloaded werden sollen (sxw, xls, pdf....). Gibt es da auch eine Möglichkeit?

      header("Content-Disposition: attachment; filename=$filename");

      Laß die filename-Erweiterung weg ("Content-Disposition: attachment"), hänge stattdessen den gewünschten Namen an die URL an (http://www.example.com/php/download.php/superduper.pdf?action=getpdf&pdf=superduper). Das ist zwar nicht ganz so schön, funktioniert aber meiner Erfahrung nach besser.

      Das ist mir nicht ganz klar, wie man hier die Varianle $filename einbindet und mit einem PHP-Skript aufruft.

      header("Content-Transfer-Encoding: binary");

      Was soll das? Ich halte die Angabe für unnötig.

      Alexander

      Martin

      1. Moin Moin !

        header("Content-type: application/octet-stream");
        Falscher MIME-Type. Application/pdf ist für PDF-Dateien reserviert.
        Ich habe da das Problem, dass später verschiedene Dateitypen gedownloaded werden sollen (sxw, xls, pdf....). Gibt es da auch eine Möglichkeit?

        http://www.iana.org/assignments/media-types/ ist die _verbindliche_ Quelle für MIME-Typen.

        BTW: heruntergeladen finde ich wesentlich eleganter als gedownloaded.

        header("Content-Disposition: attachment; filename=$filename");
        Laß die filename-Erweiterung weg ("Content-Disposition: attachment"), hänge stattdessen den gewünschten Namen an die URL an (http://www.example.com/php/download.php/superduper.pdf?action=getpdf&pdf=superduper). Das ist zwar nicht ganz so schön, funktioniert aber meiner Erfahrung nach besser.

        Das ist mir nicht ganz klar, wie man hier die Varianle $filename einbindet und mit einem PHP-Skript aufruft.

        Im Link zum Download, also genau eine Seite vorher. Oder Du baust eine "click here if download does not start"-Seite dazwischen, die genau dann erscheint, wenn keine PATH_INFO (Text hinter .php in meinem Beispiel) da ist.

        Alexander

        --
        Nein, ich beantworte keine Fragen per eMail. Dafür ist das Forum da.
        Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so!"