Fájl letöltése
Szervusztok,
van egy kódom, amely feldobná a letöltés ablakot. Sajnos meg is teszi, de csak 1 darab 0 bájt hosszúságú fájlt szed le, ahelyett, hogy az egészet leszedné...
A baj a dologban, hogy a kód végén lévő ellenőrzés nemcsak, hogy lefut, de jól le is szedi a fájt, teht jogosultsági, fájlnévelírási dologk kizárva... Mit rontok el?
■ van egy kódom, amely feldobná a letöltés ablakot. Sajnos meg is teszi, de csak 1 darab 0 bájt hosszúságú fájlt szed le, ahelyett, hogy az egészet leszedné...
A baj a dologban, hogy a kód végén lévő ellenőrzés nemcsak, hogy lefut, de jól le is szedi a fájt, teht jogosultsági, fájlnévelírási dologk kizárva... Mit rontok el?
header('Content-type: application/'.$tipus."'");
header('Content-disposition: attachment;filename="'.$res[0].'"');
header('Content-lenght:'.filesize($default_path.$res[0]));
readfile($default_path.$res[0]); // visszaraktam, lehet, hogy ettől jó
// ellenőrzésre
// echo 'letölteni: <a href="http://www.valami.hu/'.$default_path.$res[0].'">http://www.valami.hu/'.$default_path.$res[0].'</a>
-- '.$tipus.' Content-lenght: '.filesize($default_path.$res[0]);
header('Content-disposition: attachment;filename="'.$res[0].'"');
header('Content-lenght:'.filesize($default_path.$res[0]));
readfile($default_path.$res[0]); // visszaraktam, lehet, hogy ettől jó
// ellenőrzésre
// echo 'letölteni: <a href="http://www.valami.hu/'.$default_path.$res[0].'">http://www.valami.hu/'.$default_path.$res[0].'</a>
-- '.$tipus.' Content-lenght: '.filesize($default_path.$res[0]);
Re: fájl letöltés
ha a $default_paht első karaktere / jel, akkor nyugodtan elképzelhető, hogy a valami.hu//lezeto.fajl -t le tudod tölteni, de a /letezo.fajl mar egeszen máshova mutat.
Mi történik, ha egyszerűen kihagyod a headereket, akkor megjelenik a fájl tartalma?
Végül itt egy kicsit bugos a header:
letöltöget
Egyre misztikusabb... Merthogy ha a fájl nevét összerakom (lásd utolsó sor), akkor jó. A $default_path egyébként nem '/'-tel kezdődik...
Pál_úr
letöltöget vs. nem létező fájl olvasása
Tehát akkor a problémának semmi köze a letöltéshez, mivel a fájl beolvasásával van a gond. :)
vagy a default path, vagy a res hibás... ennek a megfejtését már rád bízom... a warrning bekapcsolását tényleg tudom ajánlani, sok munkaórát takaríthatsz meg vele!
Vagy az is lehet, hogy a fájl maga üres? :)
létezik...
Ha a letöltőoldalra kirakom a fájl elérési útját, és egy linket, amit a res-ből és a default_path-ból teszek össze, hogy 'itt töltse le', akkor megy. Ha header-rel kísérletezem, akkor nem megy.
A warningokat hogyan tudom úgy bekapcsolani, hogy a php.ini-hez nem férek hozzá? Az ini_set() nem nagyon tud ilyet, ha jól látom...
Pál_úr
Nem valószínű, de azért nem árt
Content-lenght
helyettContent-length
írandó.-boogie-
kipróbálva, a kód maga ok
$tipus = "vnd.ms-excel";
$res[0] = "tmp.xls";
header('Content-type: application/'.$tipus."'");
header('Content-disposition: attachment;filename="'.$res[0].'"');
header('Content-length:'.filesize($default_path.$res[0]));
readfile($default_path.$res[0]);
?>
#következtetés:
a kód maga jó
#hibalehetőség:
- hibás content-type
- hibás filename, vagy elérési út
xxx
content-type
akkor kezd a dolog tisztulni.
Mivel csak letölteni akarom a fájlokat, történik-e baja dolognak, ha alapból mindenkinek 'octet-stream'-ot adok?
Vagyis valahogy így nézne ki a dolog:
Pál_úr
Nem történik...
-boogie-