Rainer: PDF - readfile - header?

Hallo,

ich muss bzw. möchte mit readfile ein PDF einlesen und in einem mit JavaScript geöffneten PopUp anzeigen. (Intranet)

Das funktioniert auch soweit schon, allerdings bekomme ich natürlich nur wirre Zeichen angezeigt - logisch.

Was für Header muss ich denn am Anfang senden? Habe im Moment absoluten Blackout.

Gruß Rainer

  1. Was für Header muss ich denn am Anfang senden?

    Einen HTTP-Header würde ich empfehlen :)

    Als MIME-Type (wenn du das meinst) ist ggf. application/pdf geeignet, möglicherweise aber auch application/x-gzpdf für gzip-komprimierte PDF-Dateien.

    Das musst du natürlich vor dem Ausliefern ermitteln.

    1. Als MIME-Type (wenn du das meinst) ist ggf. application/pdf geeignet,

      Ja das war mit auch klar ;-)
      Mein Blackout liegt in der richtigen schreibweise:

      header("application/pdf");  ?

      Gruß Rainer

      1. Ja das war mit auch klar ;-)

        Sagtest du aber nicht :D

        header("application/pdf");  ?

        Nicht wirklich:
        http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17

      2. Mein Blackout liegt in der richtigen schreibweise:

        header("Content-Type: application/pdf"); und
        header("Content-Length: " . filesize($pdf));

        Gruss

  2. Hi,

    ich muss bzw. möchte mit readfile ein PDF einlesen und in einem mit JavaScript geöffneten PopUp anzeigen. (Intranet)
    Das funktioniert auch soweit schon, allerdings bekomme ich natürlich nur wirre Zeichen angezeigt - logisch.

    Mit welchem MIME-Typ lieferst du denn deine PDF-Ressource aus? Vermutlich text/html, wenn du nichts Spezielles definierst.

    Was für Header muss ich denn am Anfang senden?

    Den richtigen Content-Type für PDFs, also application/pdf.

    Ich frage mich allerdings, warum du die PDFs nicht direkt referenzierst, anstatt sie üebr ein PHP-Script "durchzureichen".

    Die grundsätzliche Problematik der Unwägbarkeit des clientseitigen Verhaltens ist dir bewusst? - Also dass es von der Konfiguration des Clients abhängt, ob PDFs tatsächlich im Browserfenster, im separaten Fenster des installierten PDF-Viewers oder gar nicht angezeigt werden?

    So long,
     Martin

    --
    Treffen sich zwei Holzwürmer im Käse: "Na, auch Probleme mit den Zähnen?"
    1. Hallo,

      das hab ich bisher:

      <?php
      header("application/pdf");

      include("connect.php");

      $sql = "SELECT FName FROM tbl\_pdf WHERE Md5 = '".$\_GET["R"]."'";  
      $res = mysql\_query($sql);  
      $x = mysql\_fetch\_row($res);  
        
      $file = "../../../upload/$x[0]";  
        
      echo readfile($file);  
      

      ?>
      Zeigt aber immer noch wirre Zeichen bzw. den "Quelltext" des PDF an.
      Und ich möchte wirklich _nur_ das PDF anzeigen, kein HTML oä.
      Da Intranet ist der AcrobatReader immer vorhanden!

      Gruß Rainer

      1. Hi,

        header("application/pdf");

        dass das falsch ist, hat suit doch schon erwähnt. Wie's richtig heißen muss, hat er auch verlinkt.

        echo readfile($file);

        Und das ist ebenso falsch: Du rufst die Funktion readfile() auf, die den Dateiinhalt an den Client ausgibt und dann die Dateigröße in Bytes zurückliefert - und diese Dateigröße gibst du dann mit echo auch noch aus.

        Zeigt aber immer noch wirre Zeichen bzw. den "Quelltext" des PDF an.

        Ja. Du hast auch immer noch keinen gültigen Content-Type-Header.

        Da Intranet ist der AcrobatReader immer vorhanden!

        "Vorhanden" ist nicht das allein Entscheidende. Wie er benutzerseitig eingestellt ist, beeinflust das Verhalten ganz wesentlich.

        Ciao,
         Martin

        --
        Mir geht es gut. Ich mag die kleinen Pillen, die sie mir dauernd geben.
        Aber warum bin ich ans Bett gefesselt?
  3. Oh mann,

    header("Content-Type: application/pdf");
           ^^^^^^^^^^^^^^
    natürlich.

    Jetzt wird es angezeigt. Kann ich für das Speichern auch einen Dateinamen im Header mitgeben? Ist logischewrweise nur der SpeichernKnopf im AcrobatReader vorhanden.

    Gruß Rainer

    1. Oh mann,

      header("Content-Type: application/pdf");
             ^^^^^^^^^^^^^^
      natürlich.

      Natürlich nicht - ich sagte doch schon, du sollst vorher prüfen, was du auslieferst :) Ein gzip-komprimiertes pdf-File wird vermutlich mit application/pdf nicht richtig interpretiert werden.