Autor | Zpráva | ||
---|---|---|---|
AAA Profil * |
#1 · Zasláno: 15. 7. 2012, 11:48:28
Ahoj, mám takový problém se stahováním souborů. mám skript, který mi načte názvy souborů do tabulky a po kliknutí se mají stáhnout. problém je ale s tím, že když se stáhne rar nebo zip, tak nejde otevřít.
Takhle vypadá kod: $id = $_GET['nazev']; $size = $_GET['size']; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$id); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . $size); readfile($id); exit; Díky za radu |
||
Keeehi Profil |
#2 · Zasláno: 15. 7. 2012, 12:02:19
AAA:
Když vynecháš Content-Length, tak už to funguje? Když ty soubory stáhneš přímo, ne přes tento script, jsou v pořádku? |
||
AAA Profil * |
#3 · Zasláno: 15. 7. 2012, 12:39:45 · Upravil/a: AAA
Ani bez Content-Length to nefunguje. a jak přímo? Jako kliknout pravým a dát stáhnout? tak tím to taky nejde...
Když ho chci otevřít hlásí to, že archiv má bud neznámý formát, nebo je poškozen. přitom se to stáhne jako zip a i velikost má správnou, tak nevím co na tom může být špatně |
||
ShiraNai7 Profil |
#4 · Zasláno: 15. 7. 2012, 13:17:54
Trošku offtopic, ale když budeš volat
readfile($id) (což je prakticky readfile($_GET['nazev']) tak si vytváříš dost závažnou bezpečnostní díru na webu. A první, co potencionální útočník vyzkouší, je vložit místo názvu něco jiného.
|
||
Keeehi Profil |
#5 · Zasláno: 15. 7. 2012, 13:26:25
AAA:
„a jak přímo?“ Takhle: http://example.com/slozka/soubor.zip - jde o to zjistit, jestli je soubor vůbec v pořádku nahrán. Pokud i takto stáhnutý soubor se neodaří otevřít, chyba v scriptu nebude.
Ještě zkuste z toho scriptu odstranit header('Content-Transfer-Encoding: binary');
|
||
AAA Profil * |
#6 · Zasláno: 15. 7. 2012, 13:28:47
Přímo jde stáhnout bez problému. zkoušel jsem odstranit i ten transfer-encoding a stále nefunguje.
|
||
Keeehi Profil |
#7 · Zasláno: 15. 7. 2012, 13:42:03
<?php $id = $_GET['nazev']; header("Content-Description: File Transfer"); header("Content-Type: application/force-download"); header("Content-Disposition: attachment; filename=\"$id\""); readfile ($id); |
||
AAA Profil * |
#8 · Zasláno: 15. 7. 2012, 13:47:50
Bohužel, stále nic
|
||
Kcko Profil |
#9 · Zasláno: 15. 7. 2012, 13:52:11
AAA:
Nemáte tam nějaký Gzip s output bufferingem? |
||
Keeehi Profil |
#10 · Zasláno: 15. 7. 2012, 13:53:31
Kromě velikostí původního a staženého souboru, sedí také kontrolní součty?
|
||
AAA Profil * |
#11 · Zasláno: 15. 7. 2012, 13:54:29
Nene, prostě jsem označil pár souborů, kliknul jsem pravým a dal zazipovat, žádný speciální nastavení jsem nedělal. Potom jsem si stáhnul z uložta jeden malý zip, od nich to funguje, ale když jsem ho stahoval ze svýho webu, tak nešel..
|
||
Keeehi Profil |
#12 · Zasláno: 15. 7. 2012, 13:59:26
"Gzip s output bufferingem" nemá nic s vaším zazipováním společného. Je to nastavení na servru pro komprimaci jeho výstupu.
Jaká je adresa toho scriptu? |
||
AAA Profil * |
#13 · Zasláno: 15. 7. 2012, 14:04:58
mám to na localhostu, používám xampp, nevíte jestli to nemá defaultně nastavený? a popřípadě kde se to dá změnit?
Jinak ten web potom poběží na free hostingu http://www.000webhost.com/ |
||
Keeehi Profil |
#14 · Zasláno: 15. 7. 2012, 14:06:44
|
||
AAA Profil * |
#15 · Zasláno: 15. 7. 2012, 14:22:30
Tak jsem to přenastavil a už to funguje
|
||
Časová prodleva: 12 let
|
0