Autor Zpráva
Karel Hudeček
Profil *
PHP skript na serveru posílá klientovi PDF soubor. Když klient chce prohlédnout PDF soubor, spustí se plugin Acrobat Readera a ohlásí, že soubor nezačíná "%PDF", že je poškozen atd... Když tento neotevřený soubor nechám uložit a otevřu jej z disku, vše je OK. PHP skript posílá hlavičky MIME, velikost souboru, kódování, cílový název, atd... a v datech není jediný bajt navíc. Neví někdo čím to je?

(PHP5; klienti MSIE 6, Mozilla, Acrobat 5.1)
Alphard
Profil
http://radekhulan.cz/item/jak-na-download-pdf-souboru-v-php/category/a pache-php

zde je řešen problém downloadu, ale jako přehled hlaviček by se to mohlo hodit :-)
Karel Hudeček
Profil *
Díky za odkaz, jenže v hlavičkách problém nevidím. Prohlížeč pozná, že je to PDF a předá ho acrobatu, jenže ten to nebere. Stačí uložit a otevřít z disku a vše je ok, takže problém s downloadem to není.
Yrrah
Profil
A můžeš se podívat, čím ten soubor začíná, když ho zobrazíš jen v prohlížeči (jako text)?
Nejspíš se na disk uloží trochu jiný výstup než ten, co posíláš prohlížeči.
Neposíláš to jako UTF-8 i s BOM hlavičkou?
Pavel Strejček
Profil
To je s největší pravděpodobností bug MSIE. Může pomoci přidat na konec URL, které vytváří PDF příponu .pdf. Nějak takhle:

stranka.php?id_dokumentu=123&ext=.pdf

Další věc která může mít negativní vliv je pokud je vytváření PDF spojeno s metodou POST, tu je lepší vynechat.

A ještě občas zlobí, pokud není nataveno toto:
session_cache_limiter('private');
Header('Pragma: public');
Karel Hudeček
Profil *
V prohlížeči se mi jako text nezobrazí, rovnou to jde do Acrobata. Volba "Zobrazit zdrojový kód" je nepřístupná. Jestliže v Acrobatu soubor uložím, začíná správně tak jak má a také už jde zobrazit v Acrobatu. Posílám to binárně, je to tak dobře?
Nevím jestli to je bug MSIE, ale já to zkouším v Mozille. V MSIE to samozřejmě taky nefunguje. "Pragma: public" - mám.
Pavel Strejček
Profil
Pokud se to uloží jako soubor rovnou z prohlížeče bez otevření v Acrobatu, tak je to taky poškozené?
Jedná se o vytváření PDF nějakou třídou nebo o stahování již vytvořeného PDF?
Pavel Strejček
Profil
A co je tedy na začátku, když se to uloží rovnou z prohlížeče?
Karel Hudeček
Profil *
Když se to uloží rovnou z prohlížeče, tak je to normální a korektní PDF, které začíná tak jak má. Porovnáním je totožné s původním souborem, který PHP skript posílá. Čili PDFko není vytvářeno, je pouze otevřeno na serveru ze souboru a posláno klientovi.
Pavel Strejček
Profil
Takže z toho vyplívá, že po uložení z prohlížeče na disk to jde otevřít bez chyb, když je to stejný soubor jako na serveru. Chyba musí tedy vznikat při komunikaci prohlížeče s Acrobatem, není v datech. Zkontroloval bych všechny HTTP hlavičky (neškodilo by poslat je sem) a udělal bych ty čtyři doporučení co jsem psal. Víc nedokážu z poskytnutých informací poradit.
kruxik
Profil *
Jde o chybu MSIE, dá se vyřešit přenastavením Apache:

BrowserMatch "MSIE" brokenvary=1
BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
BrowserMatch "Opera" !brokenvary
SetEnvIf brokenvary 1 force-no-vary
Toto téma je uzamčeno. Odpověď nelze zaslat.