PDF - readfile - header?
Rainer
- php
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
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.
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
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
Mein Blackout liegt in der richtigen schreibweise:
header("Content-Type: application/pdf"); und
header("Content-Length: " . filesize($pdf));
Gruss
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
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
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
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
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.