Content-Disposition: inline/attachment a IE
24 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Snažím se PHP skriptem načítat různé soubory, které chci aby se uživateli zobrazily pod jiným názvem, než jsou umístěny na serveru. Pokud použiji následující kód, pak se v IE sice načte excelovská tabulka, ale vždy pod názvem php skriptu, který tento soubor otevírá. Novynazev.xls je prostě ignorován. Pokud použiji Content-Disposition: attachment, pak je vše v pořádku, ale před otevřením souboru vždy vyskočí dialogové okno s tím, zda chci soubor otevřít/uložit, což je zase pro mě nežádoucí. Podařilo se někomu vyřešit tento problém? Volba jiného prohlížeče samozřejmě není řešením. Úkazka kódu v PHP pro xls soubor: header("Content-Type: application/vnd.ms-excel; charset=windows-1250"); header("Content-Disposition: inline; filename=\"novynazev.xls\""); $fh=fopen($fname, "rb"); fpassthru($fh); fclose($fh);
-
<HTML>Co je špatného na volbě otevřít/uložit? Attachment je to jediné správné řešení - jakmile IE vidí, že je to soubor, nabízí jej otevřít/uložit. To je chování IE, tedy něco, co neovlivníte.</HTML>
-
A ten název chceš aby byl v adresním řádku? Pak použij nějaké přesměrování, v tvém případě bude asi nejlepším klíčovým výrazem pro vyhledávání: htaccess mod rewrite
-
Toto je standardní chování content-disposition: attachment. Nevím, co se ti zdá divné. Chápu to stejně jako R.U.R. Tedy chceš mít adresu protocol://domain.tld/file.xls a po jejím navštívění začít stahovat soubor jiný, třeba moje.xls? Pak je mod_rewrite nejlepším řešením. Nípal: V případě PDF se chová IE myslim stejně jako Firefox, tedy rovnou zobrazí obsah (pomocí pluginu).
-
Ne, tady nejde vůbec o content-disposition: attachment, ten samozřejmě funguje naprosto korektně, s tím že se otevírá zmiňované dialogové okno. V případě ale již známých (asociovaných) datových typů (*.doc, *.xls) chci, aby se soubor otevřel přímo a aby uživatel nemusel ještě odklikávat Otevřít. A k tomu právě slouží Content-Disposition: inline, který bohužel v IE nedělá co má, konkrétně u souborů (*.doc, *.xls), kde je prostě nový název ignorován. Třeba PDF a další soubory jsou OK. Vím, že je to dáno až moc velkou integrací IE a MS Office, kdy prohlížeč neotevře Word, ale wordovský dokument se otevře přímo v prohlížeči. Ale i tak toto chování považuji za chybné. Na druhou stranu je to celkem prkotina, jen mě zajímalo, jestli to někdo neřešil. Jinak princip je ten, že v prohlížeči závolám php skript např. localhost/show-file.php, ten mi otevře soubor 'adresar/nazev1.xls' pod názvem nazev2.xls. A když dám následně uložit soubor jako, tak aby se mi automaticky přednastavil nazev2.xls (což se v IE neděje).
-
Aha, tak v tom případě jsem první příspěvek správně nepochopil. Ten projekt, ke kterému se váže tento problém, asi není určen pro širší spektrum uživatelů, že? Osobně totiž nevím o nikom, komu by tento způsob integrace Microsoft Office do prohlížeče fungoval bez problémů.
-
Naopak, to projekt určený pro hodně široké publikum :). Proč by neměl fungovat bez problému? To je přeci naprosto normální chování IE, stejně jako když v IE klikneš na odkaz <a href="soubor.xls">odkaz</a>, tak se ti ten excel načte přímo do prohlížeče, takže v tom nehledejte nic nestandardního, to už je léta funkční a prověřená věc milióny lidí po celým světě :). A já potřebuji nasimulovat úplně stejné chování, ale aby byly splněny dvě podmínky: 1) uživatel se nedozvěl cestu k tomu souboru (kvůli přístupovým právům, která se ověří pří volání skriptu show-file.php) 2) uživateli se soubor otevřel pod názvem, který mu sám podstrčím To samozřejmě splňuje content-disposition: attachment, u kterého je ale navíc to otravné dialogové okno u již jednou asociovaných přípon.
-
Tak se zřejmě jedná opět o nějakou chybu IE - pokud máš IE8 zkus popřepínat mezi režimy, třeba to v některém fungovat bude. Zkoušels content-disposition:inline i s jinými soubory(pdf,html,jpg)? Podle RFC (http://www.faqs.org/rfcs/rfc2183) by se měly známé přípony zobrazit okamžitě... minimálně stoji za zjištění, jestli IE parametr "inline" nebere vůbec nebo pouze s opravdu známými příponami (png,jpg,txt). Při pokusu o hledání jsem nenašel žádné řešení, jen pár povzdechnutí na tím, že "IE tyto hlavičky občas ignoruje".
-
Určitě zkoušel, problém je pouze s těmi soubory, které se otevřou přímo v prohlížeči, takže třeba u takového PDF IE volá externí aplikaci (Acrobat Reader) a vše je OK. Jinak to dělá ve všech režimech. Každopádně to moje současné řešení je i tak plně funkční. Tohle je jenom taková třešnička na dortu, aby uživatel nemusel při ukládání zadávat svůj název souboru, ale aby mu byl nabídnut automaticky.
-
Ještě mě napadla taková hloupost. IE při ukládání nabídne jako výchozí název souboru název stránky definový u html souboru tagem title. V tomhle případě se ale pochopitelně nejedná o html soubor, takže otázka zní, zda tento title lze nastavít i pomocí hlavičky HTTP protokolu. Sice jsem už procházel přehled HTTP hlaviček a nic jsem nenašel, ale mohl jsem něco přehlédnout.
-
Pavero: Nemám to teď kde vyzkoušet, ale připadalo by mi normální, kdyby jako výchozí název souboru bral název udaný ve "filename" u content-disposition. Domnívám se, že jiná hlavička, která udává název souboru, neexistuje (možná mě ale klamě pamět a neumím hledat..). A chápu správně, že pokud místo xls souboru pošleš např. jpeg nebo pdfko (i s odpovídajícím mime typem), tak se zobrazí bez nabídky "co dělat"? (Protože neodhadnu ke kterému z dotazů se odpověd "určitě zkoušel" váže :)
-
Nojo, ono se to fakt otvírá přímo v tom prohlížeči :-O Ale nevim, mě se přímo v něm otevře DOC i PDF - nebo je rozdíl i podle toho, jestli je ta aplikace nějak těsněji integrovaná do prohlížeče (Office) anebo externí (Foxit)?
-
Ano, to že se to ale otevírá přímo v prohlížeči, by ještě vůbec ničemu nemělo vadit. PDF formát se mi ve Firefoxu také otevírá integrovaně, přitom prohlížeč nabídne název souboru definovaný filename. Pouze v případě IE, když je výstupní soubor načten přímo do prohlížeče je zkrátka filename ignorován. Tady je malá ukázka k vyzkoušení: http://pavero.wz.cz/temp/odkazy.html Zajímavé je, že když se klikne v IE pravým a dá uložit jako, tak to správně doplní názvy z filename :). Pokud by někdo měl možnost to testnout v IE6 (zda jsou všechny tři odkazy funkční), budu moc rád, já tady IE6 nikde momentálně nemám.
-
Pavero: Tak po vyzkoušení příkladu jsem zjistil, že atribut filename u content-disposition:inline ignoruje i Firefox.. (pokud teda posíláš hlavičku správně). Při content-disposition:attachement jej bere jak IE, tak Firefox a snad všechny prohlížeče. Mimochodem, dostal jsem se k IE7, zkoušel jsem zobrazit MS Office dokumenty, ale nepodařilo se. Zřejmě jsem s Office nenainstaloval i potřebný plugin :) - většinu takových blbůstek automaticky při instalaci vyškrtávám. Řešení pro zobrazení jiného titulku (než názvu souboru) při zobrazení "inline" zřejmě neexistuje... tedy existuje asi jen složité opisné řešení přes mod_rewrite, kdy se požadovaný název narve do skutečné adresy a směrování na php skript (místo souboru) se provede až "uvnitř" serveru.
-
A jakou verzi Firefoxu používáš? Já mám 3.5 a naprosto v pohodě, vyzkoušeno asi 15 různých přípon a filename vždy rozpoznán. A co že ti dělá ten IE7? Nabídne ti aspoň možnost stažení souboru?
-
Hm, taky by mě zajímalo, proč existuje tolik mime typů pro Excel :-/. http://mimeapplication.net/x-msexcel
-
>> Hm, taky by mě zajímalo, proč existuje tolik mime typů pro Excel Že by Microsoft? Ten prosazuje taktiku "za každou cenu" než "držet se standardu".
-
Pavero:IE samozřejmě stažení souboru nabídne, i s korektním filename. Možná mi prostě chybí nějaký plugin pro otevírání Office dokumentů v prohlížeči. Firefox poslední verze (3.5.3). Při navštívení tvé ukázky http://pavero.wz.cz/temp/jpg.php mi zůstane v titulku "jpg.php (JPEG obrázek, 399x396 bodů)". A pokud jsem to dobře pochopil, snažíš se, aby se zobrazilo "jpg.jpg".
-
>> http://pavero.wz.cz/temp/jpg.php Přímé zobrazení se skoro u všech zobrazuje jako jpg.php včetně v infu. Pokud zvolím uložit, pak se nabídne jako jpg.jpg. >> http://pavero.wz.cz/temp/excel.php Mám OpenOffice, takže v IE8 se nezobrazí přímo, ale k uložení nabídne excel.xls. V IE6 jsem nezkoušel. Mám Visty a tam to nejde nativně. Přes IETester to zahlásí chybou, ale to bude spíše aplikaci.
-
Což se naskýtá otázka, při ukládáni se nabídne požadovaný název. Ale při přímém zobrazení toto ignoruje a bere název souboru, který byl spuštěn. Tedy content-disposition by měl smysl jen při ukládáni a ne při zobrazení.
-
Díky za vyzkoušení, zdá se, že se to chová celkem OK, tedy až na ty názvy souborů při ukladání v IE :). to Freeze: Tak ten Firefox je ok, to že v adresním řádku a na záložce zůstane jpg.php je v pořádku, tak se chovájí všechny prohlížeče stejně. Pokud ale dáš Soubor/Uložit jako, pak se ti korektně nabídne jpg.jpg, narozdíl od IE. to Tomik: díky za ten IETester, o něm jsem nevěděl, sice jak čtu, spoustu věcí nasimulovat neumí, ale i tak se bude hodit.
-
Pavero: Na simulaci IE6 lze použít samotný "IE6 standalone" - oficiálně ale není z dílny MS - funguje sice taky tak napůl, ale jako krizovka pro zkoušení to jde :)
-
Freeze: IE6 standalone mi fungoval v XP a mám ho ještě zahrabaný v bordelu. Tak jsem ho vyhrabal a na Vistě mi už bohužel nefungoval a to i přes režim kompatibility :(
-
Tak mám teď k dispozici virtualizovaný Windows XP s IE6, Office2003 a Adobe Reader 9 XLS soubor - zobrazí okno ke stažení. Kliknutím na spustit se zobrazí v okně prohlížeče (uveden jako excel.php). Uložit jako se uloží pod jménem excel.xls JPG obrázek - otevře přímo v okně (uveden jako jpg.php). Volba uložit cíl jako zobrazí název jako jpg.jpg PDF dokument - zobrazí přímo v prohlížeči bez optání (uveden jako pdf.php). Volba uložit cíl jako zobrazí název jako pdf.pdf