Autor | Zpráva | ||
---|---|---|---|
niCe Profil |
#1 · Zasláno: 21. 10. 2007, 18:45:29
Ahoj, mám ještě jeden problém s hlavičkama.
Mějme soubor, který neposílá hlavičku content-length. header("Pragma: private"); header("Cache-control: private, must-revalidate"); header("Content-Type: $typ"); header("Content-Length: 6000000"); header("Content-Disposition: attachment; filename="$jmeno""); readfile ($soubor); Takhle se nabídne soubor ke stažení, a mělo by se ukázat, že má něco okolo 6MB. Avšak u jednoho konkrétního souboru mi to pořád píše 451 bajtů a nepřepíšu to pak ani zasláním hlavičky content-length 6000000. Jak je to možné? Chápu to všechno správně? :) U jiných souborů, které mají třeba 2MB a napíšu 3000000 tak se to změní na 3 MB. Je možné aby někde server content-length blokoval? Předem dík, niCe |
||
niCe Profil |
#2 · Zasláno: 21. 10. 2007, 18:47:24
Ještě doplním, že ačkoliv to u toho souboru píše 451 bajtů a pokud ho uložím přes ten výše uvedený skript, stáhne se opravdu jen 451 bajtů, ačkoliv má něco přes 2 mega. Pokud by se to mátlo tím, že neposílá sám content-length, jaktože když uvedu těch 6000000 tak se pořád stahuje jen těch 451 bajtů?
|
||
DFly Profil |
#3 · Zasláno: 22. 10. 2007, 10:44:54 · Upravil/a: DFly
ja jsem si to udelal takhle, a funguje to bez problemu - mam dojem ze v ruznych prohlizecich zalezi i na poradi hlavicek
if (isset($_SERVER["HTTPS"])): header("Pragma: "); header("Cache-Control: "); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1 header("Cache-Control: post-check=0, pre-check=0", false); elseif ($disposition == "attachment"): header("Cache-control: private"); else: header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); endif; header("Cache-control: private"); header("Content-Type: $mime"); header("Content-Disposition:$disposition; filename=\"".trim(htmlentities($name))."\""); header("Content-Description: ".trim(htmlentities($name))); header("Content-Length: ".(string)(filesize($path))); header("Connection: close"); |
||
niCe Profil |
#4 · Zasláno: 23. 10. 2007, 19:48:01
Díky za snahu, ale nechápu z toho moc :))
Přišel jsem na další zajímavou věc. Ten konkrétní soubor, tak při dotazu na něj mi to vrací hlavičku HTTP 302 a hlavičku location, přčemž location je shodná s tím souborem, který chci. Pokud to dobře chápu, přesměrovává to samo na sebe, což je divný. Takže ten obrázek třeba na stránce zobrazit jde, ale když ho chci nabídnout ke stažení, přes ten skript nahoře, tak mi to stáhne jen nějakých 451 bajtů a ne celý obrázek. U dalších souborů je to v pohodě. Takže netuším, jestli se v tom dobře orientuju, ale zajímalo by mě, jak by se dal řešit ten problém s 302... |
||
niCe Profil |
#5 · Zasláno: 23. 10. 2007, 19:50:10
DFly
mimochodem, jenže já i když nastavím content-lenght na jakoukoliv hodnotu, při dotazu na ten soubor vrací server 302 a pořád tam budu mít jen těch 451 bajtů, a jen těch 451 se stáhne, i kdyby měl ten obrázek půl mega. Netuším co s tim a docela by mi zajímalo, jak by mohlo vypadat řešení tohohle problému, pokud teda nějaké řešení vůbec existuje :) |
||
DFly Profil |
#6 · Zasláno: 24. 10. 2007, 02:24:49
hele vubec netusim jak to v tom adresari vypada, a jaky mas script, ale napadaji me (s kristalovou kouli) dve moznosti - server pouziva jinou znakovou sadu a v nazvu je cestina nebo mezera a nebo nejaky netisknutelny znak
druhou moznosti by mohl byt mod_rewrite kde dle masky sezere i podobny nazev pro soubor ale to uz je strileni od boku - spis to vidim na prvni moznost |
||
niCe Profil |
#7 · Zasláno: 24. 10. 2007, 15:07:13
A tak, měl jsi pravdu :) V názvu souboru byla mezera a ta to mátla :)
Díky moc za odhalení :)) niCe |
||
DFly Profil |
#8 · Zasláno: 25. 10. 2007, 01:19:29
niCe to ja ne, to ma kristalova koule... :-)
|
||
Časová prodleva: 16 let
|
0