[ inodius @ 06.12.2006. 09:58 ] @
| Pokusavam jednostavno da na ovaj nacin napravim download fajlova...
Code: header('Content-Disposition: attachment; filename=../download/neki_file.pdf');
Kada pokusam da downloadujem taj fajl sve kose crte "/" se pretvore u minuse "-". Zasto se to desava? Kako ovo resiti?
|
[ noviKorisnik @ 06.12.2006. 10:03 ] @
Filename u prevodu znači "ime fajla", a upravo to i treba da uneseš - koje ime predlažeš za snimanje. O putanji već odlučuje klijent, kao i o konačnom imenu fajla kako će biti snimljen prilikom downloada.
[ inodius @ 06.12.2006. 10:13 ] @
A kako onda da se taj fajl skida sa neke druge lokacije na serveru a ne iz tog direktorijuma u kome je taj fajl na primer "downloader.php" u kome je kod koji ce odredjivati potreban fajl, a fajl koji treba skinuti se dakle ne nalazi u tom istom direktorijumu.
[ bzero @ 06.12.2006. 10:22 ] @
header() funkcija niti cita sadrzaj fajla, niti ga salje korisniku, nego salje HTTP header, tako da je za nju nebitno gde se fajl stvarno nalazi. Za citanje fajla i njegovo slanje koristi se na primer readfile().
U manualu imas primere kako se radi to sto hoces:
http://www.php.net/manual/en/function.header.php
http://www.php.net/manual/en/function.readfile.php
[ Nemanja Dubravac @ 06.12.2006. 10:27 ] @
možeš sa http headerom da preusmeriš na pravu lokaciju fajla:
header("Location: http://wwwbla.com/fajl.pdf");
ali ćeš tako otkriti i korisniku gde se pravi fajl nalazi
[ inodius @ 06.12.2006. 10:40 ] @
Da, to znam, ali nije problem u tome, a i nije mi poenta da sakrijem lokaciju, nego samo zelim da ako je .pdf fajl u pitanju da mu se ne otvara u browseru vec da mu nudi da fajl snimi, kao da nije .pdf... a na ovaj nacin ce mu se otvarati u browseru ako ima .pdf plugin, a sigurno ima.
Kako bi to bilo najbolje uraditi?
[ inodius @ 06.12.2006. 10:50 ] @
Ok, evo radi bas tako sa readfile().
Hvala svima :)
[ Miroslav Ćurčić @ 06.12.2006. 10:53 ] @
Dodaj i ovo:
header("Content-Type: application/octet-stream");
header("Content-Type: application/force-download");
pre "Content-Disposition", pa će uvek ponuditi download.
[ noviKorisnik @ 06.12.2006. 10:54 ] @
Ovaj header što si napisao znači da sadržaj koji vraćaš treba da bude tipa "attachment" i da predstavlja fajl s imenom koje odrediš u "filename".
To browseru govori da ne treba da otvori sadržaj kao web stranicu već da nudi dijalog za snimanje fajla.
Kad postaviš sve potrebne headere, sadržaj šalješ u output, recimo readfile ('../download/neki_file.pdf') ...
[ noviKorisnik @ 06.12.2006. 10:55 ] @
(iju, što sam spor :-)))
[ Miroslav Ćurčić @ 06.12.2006. 10:57 ] @
noviGonzales ?
[ inodius @ 06.12.2006. 11:00 ] @
@noviKorisnik
Da, shvatio sam sve :)
@mVeliki
Dodao sam vec i to. Hvala.
Mada ja sam stavio samo "header("Content-Type: application/octet-stream");" jer koliko sam shvatio dovoljno je ili jedno ili drugo, ili mozda gresim? Isprobao sam i radi normalno u IE/FF/Opera.
[ Miroslav Ćurčić @ 06.12.2006. 19:59 ] @
Ne znam dali je dovoljno ili ne, u svojim skriptama koristim oba (za svaki slučaj) i dosad nisam naišao na problem.
Još da dodam, da ne bude da nije rečeno, reč attachment; u "Content-Disposition" će zbuniti IE 5.5 tako da bi za podršku vlasnicima starih Win98 računara trebalo dodati proveru verzije browsera i ponuditi im verziju:
header("Content-Disposition: filename=\"$filename\"");
Mada pitanje je koliko je procentualno takvih surfera, ali ajde..
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|