ugrás a tartalomhoz

Fájl letöltése

Pal_ur · 2004. Okt. 12. (K), 11.13
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?

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]);
 
1

Re: fájl letöltés

T.G · 2004. Okt. 12. (K), 11.32
létezik a fájl? :) warrningokat kiírod?

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:

<?php
header('Content-type: application/'.$tipus."'");
//                                         ^^^
?>
Biztos kell a végére az a aposztróf?
2

letöltöget

Pal_ur · 2004. Okt. 12. (K), 11.55
Ha a headereket kihagyom, márhogy ki'kommenet'ezem, akkor a readfile-ra sem jelenik meg a fájl :( De ha belerakom a teljes elérést (http://www.valami.hu/-t is), akkor sem...

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
3

letöltöget vs. nem létező fájl olvasása

T.G · 2004. Okt. 12. (K), 12.08
> ...readfile-ra sem jelenik meg a fájl :(
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? :)
4

létezik...

Pal_ur · 2004. Okt. 13. (Sze), 09.07
Szóval, a következőkre jutottam...

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
5

Nem valószínű, de azért nem árt

Bártházi András · 2004. Okt. 13. (Sze), 09.14
Nem hiszem, hogy ez okozná a hibát, de a Content-lenght helyett Content-length írandó.

-boogie-
6

kipróbálva, a kód maga ok

Anonymous · 2004. Okt. 13. (Sze), 11.26
a következő próbát tettem, amellyel működött a kódod
<?php
$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
7

content-type

Pal_ur · 2004. Okt. 13. (Sze), 15.20
Aha,

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:

header('Content-type: application/octet-stream');


Pál_úr
8

Nem történik...

Bártházi András · 2004. Okt. 13. (Sze), 15.25
Sőt, írhatsz
<? header('Content-type: letoltendo/anyag'); ?>
fejlécet is. :) De azt hiszem, hogy valamelyik böngésző figyelmen kívül hagyja teljesen ezeket.

-boogie-