Autor Zpráva
niCe
Profil
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
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
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
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
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
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
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
niCe to ja ne, to ma kristalova koule... :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0