ugrás a tartalomhoz

letöltés gondok

Anonymous · 2005. Már. 3. (Cs), 17.03
PHP-val próbálok fájl letöltést irányítani. Első körben szeretném, hogy a .doc, .xls fájlokat nyissa meg, a .zip-et mentse.
Ez lenne:
$theFile = "teszt.zip";
$dwldUrl = "download/".$theFile;
$pos = StrPos(StrRev($theFile), ".");
$pos = 0 - $pos;
switch(SubStr($theFile, $pos))
{
case "zip": header("Content-Type: application/x-zip-compressed"); break;
case "doc": header("Content-Type: application/msword"); break;
// stb...
}
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=innen-".$theFile);
header("Content-Length: ".FileSize($dwldUrl));
readfile($theFile);

Erre a mozilla szépen elnevezi és letölti a zip fájlt, ha egy .doc -ra tesztelek, azt kérdezőablak után megnyitja az alkalmazásban.
Az IE a ,doc fájlt megnyitja, viszont a .zip-et nem tudja lementeni. A kérdezőablak szerint nem látja a megadott fájlnevet, hanem a letöltést vezérlő script nevét írja ki: download.php?dwldId=1 így.
Ha a readfile() helyett:
header("Location: ".$dwldUrl);
exit;

formát használom, akkor az IE letölt, de az eredeti fájlnévvel (átnevezve akarom letöltetni). Próbáltam az fpassthru()-t is.
A doksik szerint jól használom a headereket (a Mozilla meg is érti, mit akarok) az IE-vel mégsem jó.
Egy kis súgás most jól jönne.

Környezet: localhoston WinXP+Apache+PHP4.3.?

Köszi: Thom
 
1

Ebben mindent megtalálasz; e

Anonymous · 2005. Már. 3. (Cs), 23.55
Ebben mindent megtalálasz; esetleg kombinálhatod, ahogy akarod, hogy megjelenjen az ablak vagy töltse a böngészőbe az ismert fájlokat (ekkor nem kell a force download).

// fix for IE catching or PHP bug issue
header("Pragma: public");
header("Expires: 0"); // set expiration time
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

// browser must download file from server instead of cache
// force download dialog
header("Content-Type: application/force-download");
header("Content-Type: application/download");

//some extra
header("Content-Type: application/octet-stream");

// use the Content-Disposition header to supply a recommended filename and
// force the browser to display the save dialog.
header("Content-Disposition: attachment; filename=".basename($fn).";");

header("Content-Transfer-Encoding: binary");
header("Content-Length: ".$filesize_in_bytes);


bye
2

Köszi, megnézem

Anonymous · 2005. Már. 4. (P), 00.28
Köszi, anonymous!

A cache-olással kapcsolatosakat és a Content-Transfer-Encoding: binary sort még nem próbáltam, a többi megvolt.
Ki lesz próbálva, meglátjuk.
Ami zavar, hogy megint az IE-vel van baj ott ahol a Mozilla szépen zenél (nem látja a header-ben elküldött új fájlnevet és ezért(?) nem tudja menteni).
Közben én megkerültem a problémát, de holnap kipróbálom újra.

Üdv: Thom
3

Nem kerek

Hodicska Gergely · 2005. Már. 4. (P), 17.49
Szia!

header("Content-Type: application/force-download");
header("Content-Type: application/download");

//some extra
header("Content-Type: application/octet-stream");


Ennek így nincs sok teteje. Ha azonos néven adsz ki headereket, akkor az utolsó marad érvényben. ;)


Felhő
4

RE: nem kerek

Anonymous · 2005. Már. 6. (V), 22.17
Szia Felhő!

Pontosan nem tudom a szabványt és nem is érdekel egészen, addig míg mindenki úgy támogatja, ahogy neki jólesik; a másik ha meg működik szintén kit érdekel.

A kijelentés azért nem igaz, mert ha a felső kettőt elveszed az IE nem dob fel ablakot mentésre, hanem betölti a böngészőbe pl. ha excel.
Az igaz, hogy talán az utolsót el lehetne venni, de mivel szerintem nem zavar be...és azoknak a fájloknak a letöltése esetén, amik nem esenek egy nevezetes program alá sem így legalább letöltődnek.

Ha van jobb ötleted nyugodtan oszd meg szívesen vesszük. Eddig nekem működik IE, NS és Firefox alatt is.

Bye