Page 1 of 1

PDF-Download

Posted: 2003-08-13 18:51
by marky
Hallo,

ich nutze ein PHP-Skript zum bereitstellen von PDF-Downloads (hier vereinfacht):

Code: Select all

<?php 

header("Content-type: application/pdf");
header("Content-Disposition: inline; filename=test.pdf");

$fd = fopen ("test.pdf", "r");
while (!feof($fd)) {$inhalt .= fgetc($fd);}
fclose ($fd);

print $inhalt;

?>
Woran kann es liegen, dass der Netscape-Navigator keine korrekte PDF-Datei empfangen kann (er bekommt nur "wirre Zeichen")?

Der Internetexplorer bekommt korrekte Daten.

Geleiches Script läuft auf einem anderem Server problemlos: auch Netscape bekommt hier seine Daten.

Re: PDF-Download

Posted: 2003-08-14 08:07
by r00ty
das sollte klappen:
du benennst die Seite, die das pdf anzeigen soll so in irgendwas.pdf um
machst ne
.htaccess mit

Code: Select all

AddType application/x-httpd-php .pdf
und im der pdf datei:

Code: Select all

<? readfile("/meinpfad/meinpdf.pdf"); ?>
nicht getestet, sollte aber gehen

Re: PDF-Download

Posted: 2003-08-14 09:27
by marky
...aber bewirkt nur, dass auch PDF-Dateien von PHP interpretiert werden. Das bringt mir aber nichts, da das Problem nicht daran liegt.

Wie schon gesagt funktioniert das Skript insoweit problemlos, dass der IE alles korrekt bekommt bzw. dass es auf einem anderen Server mit beiden (Netscape und IE) läuft.

Die Frage ist nun, was gerade an meinem Server anders ist, dass der Browser Netscape mit den Daten nicht klar kommt, der IE aber schon.

Weiß das denn niemand?

Re: PDF-Download

Posted: 2003-08-14 13:17
by r00ty
ich würde es mal probieren
wenn der syntax korrekt ist funktioniert das meine Meinung nach ganz sicher....
(p.s.: hast du mal beim Netscape geschaut, ob er überhaupt PDFs öffnet ?)

Re: PDF-Download

Posted: 2003-08-14 17:47
by gamecrash
@r00ty:

Die [] funktionieren noch. Beim ersten hast Du mit } statt ] abgeschlossen, beim Zweiten hast Du das / vergessen :P

@Problem:

Könnt sein, dass der Netscape den Content-Length Header braucht? Bin mir ned sicher, aber irgendwas war da mal dass der noch nen Extra-Header braucht...

Re: PDF-Download

Posted: 2003-08-14 18:41
by r00ty
@GameCrash

man war ich besoffen, als ich das geschrieben habe... thx

@Problem

meld dich mal, falls du es rausgefunden hast

Re: PDF-Download

Posted: 2003-08-14 21:50
by marky
ich würde es mal probieren
ich hab es probiert, aber es hat nichts genützt: beide scripte bringen das gleiche probelm: IE ja Netscape auf meinem Server nein, auf den meisten anderen ja.
hast du mal beim Netscape geschaut, ob er überhaupt PDFs öffnet?
Netscape öffnet diese nicht im Browserfenster, sondern übergibt die Datei an den Acrobat-Reader und dieser öffnet sie in seinem Fenster (bzw. er sollte dies bekommt aber in meinem fall nur Müll - von den meisten anderen Servern klappt es so, wie beschrieben...)

Die Frage ist also: was ist serverseitig bei mir anders, dass der blöde Netscape das nicht kann...
Könnt sein, dass der Netscape den Content-Length Header braucht? Bin mir ned sicher, aber irgendwas war da mal dass
der noch nen Extra-Header braucht...
Das klingt klug. Sofern es die Möglichkeit gibt, das als Standard (beim Apache?!?) einzustellen könnte dies sein. Wie oben beschrieben muss auf anderen Servern ja nichts ergänzt werden.

Weißt du, wie dieser Content-Length Header exakt aussehen muss? Ich würde es dann mal probieren...

Re: PDF-Download

Posted: 2003-08-16 10:17
by gamecrash
header('Content-Length: '.strlen($inhalt));

Aber ob das wirklich dafür verantwortlich ist, keine Ahnung...

Was bei Deinem Server anders ist, kann ich Dir leider auch ned sagen ;) Evtl. ne andere Apache- oder PHP-Version...

Re: PDF-Download

Posted: 2003-08-17 18:49
by marky
Der Tipp mit dem Content-Length-Header klang schon sehr schlau, hat aber leider nichts gebracht.

Ich will mal "bildlich" darstellen, was das Probem ist. Die Datei wird von meinem Server geschickt und vom Internetexpolorer korrekz empfangen wie folgt (nur die ersten Zeilen):

Code: Select all

%PDF-1.3 %âãÏ� 1 0 obj << /Type /Catalog /Outlines 2 0 R /Pages 3 0 R >> endobj 2 0 obj << /Type /Outlines /Count 0 >> endobj 3 0 obj << /Type
/Pages /Kids [6 0 R 24 0 R 26 0 R ] /Count 3 /Resources << /ProcSet 4 0 R /Font << /F1 8 0 R /F2 10 0 R /F3 12 0 R /F4 14 0 R /F5 16 0 R /F6 18 0 R /F7 20
Demgemäß kann sie der Acrobat-Reader auch korrekt darstellen.

Der Netscape bekommt aber (und nur wenn obiges Script auf !meinem! Server läuft) folgende Zeilen (wieder nur die ersten, wenn man das überhaupt sagen kann :-):

Code: Select all

Ã?0:%v x)¡ïŠ©õÃ?5d«Iâ?°Â¹Â±2iâ??ãâ?¬Ã?Ã?ðGâ?ºzË?êêyÃ?Ã?¶Lcâ?¦SmÃ¥[â?¡Ã­ÃVâ??oí¦«umC£Ã?òÃ?]Ã¥pnâ??n=â?¦Ã?»ž®5ðÃ?Ã?ñ¦"í¡"0qÃ?Ã?Ã?EN{K8¾Dâ??Ã?}i«]â?¡Â¹Â¹
Sowas ist natürlich nicht zu gebrauchen...

Irgendwas muss (mein!) Server anders machen, damit Netscape nicht klar kommt. Dummerweise kann ich auf diesen Browser aber nicht verzichten, sodass ich das Problem lösen muss...

Re: PDF-Download

Posted: 2003-08-19 19:17
by paranoid
Ich könnte mir vorstellen, daß dein Server eine Kompression durchführt und Netscape das nicht mitbekommt. Das solltest du aber abstellen können. Versuch doch mal, ob du die mit Netscape heruntergeladene Datei mit einem (Ent)packprogramm öffnen kannst, ich würde WinZip probieren, da das auch mit GZip etc. klarkommt.

Re: PDF-Download

Posted: 2003-08-19 19:26
by marky
Ich könnte mir vorstellen, daß dein Server eine Kompression durchführt und Netscape das nicht mitbekommt.
Das war in der Tat richtig - der Server komprimiert die Datei. Wenn ich Sie mit Netscape herunterlade und als .gz speichere, kann ich sie entpacken und dann öffnen.

Das solltest du aber abstellen können.
Wie kann ich verhindern, dass Dateien komprimiert geschickt werden?

Re: PDF-Download

Posted: 2003-08-19 22:23
by r00ty
krazz....
hätt nicht gedacht, dass es das ist

gibts da nicht ein Apache Modul das zippt ?

Re: PDF-Download

Posted: 2003-08-20 10:44
by marky
gibts da nicht ein Apache Modul das zippt ?
Von der Logik her müsste es der Apache sein, der zippt.

Ich habe einen reinitialisierter Root-Server mit:

-Suse 8.1
-Apache 1.3.26
-Mysql 3.23.52
-PHP 4.2.2
-Openssl 0.9.6.g
-Confixx Pro 2.0

An den Standards habe ich nichts verändert. Ich hoffe, dass ich nicht das ganze neu kompilieren muss, sondern dass es hilft, einfach irgendwo ein "yes" oder "no" zu setzten. Kann mir jemand sagen, wo ich dies tun müsste?

Re: PDF-Download

Posted: 2003-08-20 12:41
by moppi
Hallo,

ich hatte ähnliches Problem, folgendes dürfte funktionieren.

Code: Select all

	header('Content-type: application/pdf');
	header('Content-Disposition: attachment; filename='.$pdf.'.pdf');
	readfile('../../admin/pdf_ablage/rechnungen/'.$pdf.'.pdf');
	exit;
Lass mich wissen ob es klappt...

Re: PDF-Download

Posted: 2003-08-20 14:41
by marky
danke für den Tipp - hat aber leider nichts gebacht. Ich denke, dass der Header nicht das Problem ist. Bisher hat weder der "Content-Disposition"- noch der "Content-Length"-Header etwas am Ergebnis geändert.

Ich denke, man muss dem Apachen einfach nur sagen, dass er nichts komprimiert rausschicken soll, weil - wie wir dank paranoid wissen - Netscape damit nicht klar kommt. Die Frage ist nun nur, wie man das ändern kann...

Re: PDF-Download

Posted: 2003-08-20 15:13
by moppi
ich kann mir erlich gesagt nicht vorstellen das es daran liegt.
ich vermute eher mal netscape ist der übeltäter - sorry wenn ich jemanden damit zu nahe trete aber ich hatte zu viel theater mit dem ding. :D

schau bitte mal hier nach, das habe ich dazu gefunden:
http://www.networkcomputing.de/workshop ... _0502.html

gruß
daniel

Re: PDF-Download

Posted: 2003-08-20 16:09
by marky
Für mich stellt sich jetzt eine neue Frage: ist es für meinen Webserver (Celeron 1.200 MHz, mit 256 MB Ram) gut, alle Seiten zu komprimieren. Zum Thema Serverlast ist man sich da ja uneins. Jedenfalls muss der Server etwa 2 Mio. Seiten bei 25 GByte Traffic im Monat erzeugen.
Was sagt jemand, der sich mit sowas auskennt dazu? Kommt der Server mit oder ohne Komprimierung besser klar?

Ja und dann habe ich immer noch das alte Problem: wie kann die (wenn auch nur explizit für einzelne Dateien) verhindern, dass diese komprimiert ausgegeben werden? Mir ist schon klar, dass hier (auch) Netscape das Problem ist, aber es muss auch mit diesem Browser laufen. Immerhin benutze ich zum Testen nicht eine Uralt-Http-1.0-Version sondern Netscape 4.7.

Ach ja, noch was: Komprimieren die Server "einfacher" 1&1 Webhosting Pakete die Daten? O.g Traffic bezog sich nämlich auf ein solches Paket (bei dem auch der Download mit Netscape funktioniert).

Re: PDF-Download

Posted: 2003-08-20 16:21
by moppi
bei traffic würde ich die komprimierung schon empfehlen. man kann den level bei neueren gzip mods einstellen.

handelt es sich dabei um dynamische inhalte?

Re: PDF-Download

Posted: 2003-08-20 21:28
by marky
handelt es sich dabei um dynamische inhalte?
Zunächst werden alle Seiten mittels PHP zusammengebastelt (Head, Content, Foot). Dann steht noch eine Community bereit, deren Basis eine MySQL-Datenbank ist. Insofern sind die Inhalte recht dynamisch 8O

Die Sache mit der Kompression schreckte mich nur ab, weil der Celeron doch nicht so gerne rechnet. Kompression ist aber meines Erachtens eine rechenintensive Angelegenheit.

Wo kann man den Level einstellen, bzw. die Kompression ganz abschalten?

Re: PDF-Download

Posted: 2003-08-21 07:48
by moppi
Celeron nicht gerne rechnet? meines erachtens nach ist der Celeron nicht mit den Multimeida Fähigkeiten so gut ausgestattet wie ein Pentium Pro z.B. aber Linux braucht des bestimmt nicht :D ist meine Auffassung.

zu dem mod_gzip also ich habe da gestern nur einmal schnell danach gesucht und einige parameter dazu gefunden. sieh doch bitte auch mal mit google weiter nach, denn ich habe damit keine weitere erfahrung.

ein tip vielleicht, wenn dein server viel zu tun hat usw. dann wäre es vielleicht angebracht einmal über einen art php-compiler nachzudenken, denn was der rausholt unter umständen da kannst jedes aufgerufene dokument 5x zippen und zum client senden :D

gruß
daniel

Re: PDF-Download

Posted: 2003-09-03 10:58
by marky
back to the topic:

Wie kann ich verhindern, dass PDF-Dateien komprimiert rausgeschickt werden?

Danke
Marky

Re: PDF-Download

Posted: 2003-10-02 13:43
by hbaes
1.) möglichkeit php.ini
setze:

Code: Select all

zlib.output_compression = Off
die kann natürlich auch nur im betreffenden VHost gesetzt werden

2.)
nähere Infos bzg. Output Compression:
http://www.php.net/manual/de/function.header.php

greets
Harald

Re: PDF-Download

Posted: 2003-10-03 00:46
by cpr
In der httpd.conf:

<IfModule mod_gzip.c>
# snip
mod_gzip_item_exclude reqheader "User-Agent: .*Mozilla/4..*["
# snip
</IfModule>

(Die Sektion <IfModule mod_gzip.c> wird schon exxistieren, also bitte einfügen)

Der vorige Poster vermutete PHPs Zuständigkeit. Das kann man aus der Entfernung nicht sagen, aber möglicherweise hilft _vor_ dem Aufruf der Workaround von Jurgen Westerhof <php at jurgle dot nl> 28-Sep-2003 03:07 auf http://de.php.net/header

HTH

Re: PDF-Download

Posted: 2003-11-13 11:21
by marky
Die Sektion <IfModule mod_gzip.c> existiert bei mir leider nicht.

Re: PDF-Download

Posted: 2003-11-13 11:48
by robertw
Hallo!

Wenn Du wissen willst, ob Deine Seite gezippt übertragen wird, kannst Du hier einen Test machen.

Sehr schöne Informationen zu dem Thema mod_gzip gibt es hier, inkl. einer Liste, welche Browser-Version es unterstützt.

Robert