Problem bem Anzeigen von PDF-Files
Hallo,
ich soll eine Funktionalität implementieren, mit der über den
Browser PDF-Dateien angezeigt werden können(Umgebung: Suse Lixux,Firefox)=
Habe dazu folgenden Code gefunden:
header("Content-type: application/pdf");
header("Content-Length: 12345");
header("Content-Disposition: inline; filename=3Dabc.pdf");
readfile(kompletter_pfad);
Es wird dabei das Programm KPDF aufgerufen, das dann folgende Fehlermeldung=
bringt:
file :///tmp/abc.pdf kann nicht geöffnet werden
Warum hier das tmp-Verzeichnis erscheint, ist mir schleierhaft, die
PDF-Dateien liegen in einem anderen Verzeichnis(der komplette Pfad wurde
ja bei readfile angegeben).Wer weiss Abhilf?
Gruss, Helmut
Re: Problem bem Anzeigen von PDF-Files
Helmut Blass schrieb:
> Hallo,
> ich soll eine Funktionalität implementieren, mit der über den
> Browser PDF-Dateien angezeigt werden können(Umgebung: Suse Lixux,Firefox)
> Habe dazu folgenden Code gefunden:
>
> header("Content-type: application/pdf");
> header("Content-Length: 12345");
> header("Content-Disposition: inline; filename=abc.pdf");
> readfile(kompletter_pfad);
>
> Es wird dabei das Programm KPDF aufgerufen, das dann folgende Fehlermeldung
> bringt:
>
> file :///tmp/abc.pdf kann nicht geöffnet werden
>
> Warum hier das tmp-Verzeichnis erscheint, ist mir schleierhaft, die
> PDF-Dateien liegen in einem anderen Verzeichnis(der komplette Pfad wurde
> ja bei readfile angegeben).Wer weiss Abhilf?
Du kennst aber schon den Unterschied zwischen Client und Server?
Das readfile liest auf dem Server. KPDF läuft auf dem Client und muss
die Datei ja irgendwoher öffnen. Dazu hat sie der Browser (ebenfalls
Client) in ein temporäres Verzeichnis gelegt.
Dass bei dir offenbar Client und Server auf ein und demselben Computer
sind, ist toll, erspart dir aber nicht, diese Trennung zu machen.
Kannst du andere PDF-Dateien aus dem Web öffnen?
Findet readfile die Datei korrekt?
Werden evtl. PHP-Fehler geworfen, die du nicht siehst?
Wie groß ist abc.pdf auf dem Server, wie groß nach der Ankunft auf dem
Client? Ist deine Content-Length richtig?
Daniel
--
------- _ | _ |_ _. | _ _ _ -------
(_| | (_) |_) (_| | /_ (_) (_)
_| Deine Reisecommunity
--- Reiseblogs - Reisekarte - Reisetipps - http://www.globalzoo.de/ ---
Re: Problem bem Anzeigen von PDF-Files
In article <46ab0764$0$5710$9b4e6d93 [at] newsspool2.arcor-online.net>, Daniel F=
ett
<"news A" [at] fragcom.de> wrote:
>Du kennst aber schon den Unterschied zwischen Client und Server?
>
>Das readfile liest auf dem Server. KPDF läuft auf dem Client und muss
>die Datei ja irgendwoher öffnen. Dazu hat sie der Browser (ebenfalls
>Client) in ein temporäres Verzeichnis gelegt.
>
>Dass bei dir offenbar Client und Server auf ein und demselben Computer
>sind, ist toll, erspart dir aber nicht, diese Trennung zu machen.
>
>Kannst du andere PDF-Dateien aus dem Web öffnen?
>
>Findet readfile die Datei korrekt?
>
>Werden evtl. PHP-Fehler geworfen, die du nicht siehst?
>
>Wie groß ist abc.pdf auf dem Server, wie groß nach der Ankunft auf dem
>Client? Ist deine Content-Length richtig?
Danke für die Infos. Habe zu dem Thema bis jetzt nur spärliche Informat=
ionen
gefunden und dazu kommt noch, dass Client und Server in der Testumgebung
tatsächlich auf_ einem_ Rechner liegen, was natürlich für ein bissche=
n
Verwirrung sorgte. Wenn ich dich richtig verstanden habe, ist aber die
header-Befehlssequenz prinzipiell korrekt?! Werde mir am Montag im Büro d=
ann
mal die Sache auf Basis Deiner Hinweise nochmal genau anschauen...
Gruss, Helmut
Re: Problem bem Anzeigen von PDF-Files
Helmut Blass schrieb:
> Hallo,
> ich soll eine Funktionalität implementieren, mit der über den
> Browser PDF-Dateien angezeigt werden können(Umgebung: Suse Lixux,Firefox)
> Habe dazu folgenden Code gefunden:
>
> header("Content-type: application/pdf");
> header("Content-Length: 12345");
> header("Content-Disposition: inline; filename=abc.pdf");
> readfile(kompletter_pfad);
Mach lieber
header('Content-Disposition: inline; filename="abc.pdf"');
> Es wird dabei das Programm KPDF aufgerufen, das dann folgende Fehlermeldung
> bringt:
Haette es dann nicht
header('Content-Disposition: attachment; filename="abc.pdf"');
heissen muessen?
> file :///tmp/abc.pdf kann nicht geöffnet werden
Wie bereits vermutet wurde liegt wahrscheinlich ein simpler Scriptfehler
vor. Kommentiere mal den Content-Type Header aus und gucke mal ob da
wirklich nen PDF rauskommt.
Frage:
Rufst du die URL per httpS auf?
Gruss
Joerg
--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Re: Problem bem Anzeigen von PDF-Files
Helmut Blass schrieb:
> Hallo,
> ich soll eine Funktionalität implementieren, mit der über den
> Browser PDF-Dateien angezeigt werden können(Umgebung: Suse Lixux,Firefox)
> Habe dazu folgenden Code gefunden:
>
> header("Content-type: application/pdf");
> header("Content-Length: 12345");
> header("Content-Disposition: inline; filename=abc.pdf");
> readfile(kompletter_pfad);
>
> Es wird dabei das Programm KPDF aufgerufen, das dann folgende Fehlermeldung
> bringt:
>
> file :///tmp/abc.pdf kann nicht geöffnet werden
das ist das file, das Konqueror via HTTP empfangen hat und in tmp
abgespeichert hat. Ich bin mir sicher, dass entweder das File nicht oder
defekt angekommen ist. Guck mal in /tmp/ ob dort das File liegt:-)
>
> Warum hier das tmp-Verzeichnis erscheint, ist mir schleierhaft, die
> PDF-Dateien liegen in einem anderen Verzeichnis(der komplette Pfad wurde
> ja bei readfile angegeben).Wer weiss Abhilf?
*LOL* Ich glaube du solltest di9r als erstes mal ein Einsteiger Buch zu
PHP besorgen.
>
> Gruss, Helmut
Re: Problem bem Anzeigen von PDF-Files
Helmut Blass schrieb:
>
> header("Content-Length: 12345");
> readfile(kompletter_pfad);
Die Anzahl der Bytes sollte schon stimmen:
$str = file_get_contents(...);
header("Content-Length: ".strlen($str));
print $str;
Peter
Re: Problem bem Anzeigen von PDF-Files
Peter Schleif wrote:
> header("Content-Length: ".strlen($str));
Unsinn!
header('Content-Length: '.filesize($file));
MfG, Ulf
Re: Problem bem Anzeigen von PDF-Files
Ulf Kadner schrieb:
>header('Content-Length: '.filesize($file));
Was ist, wenn jemand die Datei zwischen hier und dem Aufruf von readfile
ändert?
--
Wolfgang Fellger
Re: Problem bem Anzeigen von PDF-Files
Ulf Kadner schrieb:
>
> Unsinn!
Deine Überheblichkeit ist peinlich, Ulf.
header("Content-Length: ".strlen($str));
header('Content-Length: '.filesize($file));
Deine und meine Lösung liefern den gleichen Wert. Also überleg doch
bitte beim nächsten mal bevor du mit deratig abfälligen Bemerkungen um
dich wirfst.
Meine Version hat IMHO noch den Vorteil, dass der der Code auch dann
gleich bleibt, wenn der Inhalt von $str nicht aus einer Datei kommt
sondern das pdf selbst generiert wird oder nach dem Einlesen verändert
wird, wie auch Wolfgang bereits angedeutet hat.
Peter
Re: Problem bem Anzeigen von PDF-Files
Peter Schleif schrieb:
> Ulf Kadner schrieb:
>>
>> Unsinn!
>
> Deine Überheblichkeit ist peinlich, Ulf.
>
>
> header("Content-Length: ".strlen($str));
> header('Content-Length: '.filesize($file));
Allerdings ist die strlen Version Performance- und Resourcentechnisch
ein Schuss ins Knie.
> Meine Version hat IMHO noch den Vorteil, dass der der Code auch dann
> gleich bleibt, wenn der Inhalt von $str nicht aus einer Datei kommt
> sondern das pdf selbst generiert wird oder nach dem Einlesen verändert
> wird, wie auch Wolfgang bereits angedeutet hat.
Ist der Content-Length Header eigentlich Pflicht?. Bei dynamisch
erzeugten Dokumenten ist das unter Umstaenden garnicht so einfach
zubestimmen.
Gruss
Joerg
--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Re: Problem bem Anzeigen von PDF-Files
Joerg Behrens schrieb:
>Allerdings ist die strlen Version Performance- und Resourcentechnisch ein
>Schuss ins Knie.
Warum? Auch readfile lädt IIRC die gesamte Datei in den Speicher. Und die
Bestimmung der Stringlänge ist ja hoffentlich O(1).
Downloads überhaupt über PHP laufen zu lassen, ist performancetechnisch ein
Schuss ins Knie, aber das ist eine andere Baustelle.
--
Wolfgang Fellger
Re: Problem bem Anzeigen von PDF-Files
Wolfgang Fellger wrote:
> Ulf Kadner schrieb:
>
>> header('Content-Length: '.filesize($file));
>
> Was ist, wenn jemand die Datei zwischen hier und dem Aufruf von readfile
> ändert?
Dann bekommt der Nutzer den Inhalt der vor der Änderung in der Datei
steht. Problem sehe ich nicht und es schont die Performance.
MfG, Ulf
Re: Problem bem Anzeigen von PDF-Files
Peter Schleif wrote:
> Deine Überheblichkeit ist peinlich, Ulf.
Wenn Dir jemand sagt das das was Du schreibst Unsinn ist ist das
überheblich? Seltsam Du! Ich würde das maximal als frech bezeichnen.
Aber wenn Dus so haben willst.
> header("Content-Length: ".strlen($str));
> header('Content-Length: '.filesize($file));
>
> Deine und meine Lösung liefern den gleichen Wert.
Darum gings mir leider nicht. Es ging um die unnötig verpulferte
Performance für die tatsache das vorher alles eingelesen wird.
Sicher kann man jetzt den Einwand bringen, das eine Änderung der Datei
zwischen Ermitteln von Dateigröße und readfile() auftreten kann.
Aber das ist alles ne Sache von ordentlichen Aufbau von Anwendungen und
sollte nicht vorkommen. Eine Änderung einer Datei die als Download
angeboten wird impiliziert m.M. nach das man diese nicht mehr unter der
selben URL erreichen kann. Diese Art und Weise ist ja bestens von
Linux-Distries bekannt und stellt für Nutzer einen Vorteil dar.
MfG, Ulf
Re: Problem bem Anzeigen von PDF-Files
Ulf [Ingrid] Kadner wrote:
> Wolfgang Fellger wrote:
>> Ulf Kadner schrieb:
>>
>>> header('Content-Length: '.filesize($file));
>>
>> Was ist, wenn jemand die Datei zwischen hier und dem Aufruf von readfile
>> ändert?
>
> Dann bekommt der Nutzer den Inhalt der vor der Änderung in der Datei
> steht. Problem sehe ich nicht und es schont die Performance.
Um Mißverständnisse auszuräumen.
Ich sah es als selbstverständlich an das Jede Änderung an einer Datei zu
einer neuen Dateiversion gehört. Neue Version === neue Url
MfG, Ulf
Re: Problem bem Anzeigen von PDF-Files
Joerg Behrens wrote:
Hallo,
> Ist der Content-Length Header eigentlich Pflicht?.
Nein, aber nur mit Content-Length Header zeigen Web-Browser
eine Fortschrittsanzeige, 80% geladen xKByte/S, an, weshalb
sie sehr praktisch ist. Lässt sich allgemein für mit PHP
generierte Seiten gut mit ob_start(), ob_get_length() und Co.
erstellen.
tschuess
[|8:)