Autor | Zpráva | ||
---|---|---|---|
wolfik Profil |
#1 · Zasláno: 18. 6. 2010, 15:16:47 · Upravil/a: wolfik
Dobrý den,
potřeboval bych poradit... Pro vynucení stažení souboru používám kód, co jsem našel tady na fóru a trochu si ho upravil.. <?php $stahnout = $_GET['nazev']; header("Content-Description: File Transfer"); header("Content-Type: application/force-download"); header("Content-Length: ".filesize($stahnout)); header("Content-Disposition: attachment; filename=$stahnout"); readfile($stahnout); ?> stažení pak mám asi takto: <a href="stahnout.php?nazev=studijni_text.pdf">studijní text</a> Vše funguje jak má, "problém" nastavá v okamžiku, kdy soubor je ještě někde ve složce. Např. <a href="stahnout.php?nazev=media/pdf/studijni_text.pdf">studijní text</a> defaultní název souboru je pak "media_pdf_studijni_text.pdf" a já bych chtěl aby to byl pouze "studijni_text.pdf". Aby v názvu souboru nebyly názvy složek, ve kterých je uložen. Poradíte mi prosím jak kód upravit? Děkuji |
||
panther Profil |
#2 · Zasláno: 18. 6. 2010, 15:22:09
wolfik:
nevím, jestli to nepůjde jinak, minimálně můžeš vzít regulárem jen to, co je za posledním lomítkem, pokud tam nějaké lomítko je. |
||
Majkl578 Profil |
#3 · Zasláno: 18. 6. 2010, 15:43:00
Řádek 6 zkus zaměnit za tohle:
header('Content-Disposition: attachment; filename=' . basename($stahnout)); Mimochodem, co se stane, když do adresy dám něco jako stahnout.php?nazev=config.php ? :)
|
||
wolfik Profil |
#4 · Zasláno: 18. 6. 2010, 15:49:41 · Upravil/a: wolfik
Majkl578:
Funguje, děkuju. "co se stane, když do adresy dám něco jako stahnout.php?nazev=config.php?" Asi se stáhne ten soubor, což by asi neměl jinak by jste to nepsal. Takže metoda GET je v tomto případě špatný nápad. Chtělo by to vyměnit za metodu POST, že? A neporadíte mi prosím jak? edit: na to by se musela vytvořit nějaká složitá funkce, že? |
||
Majkl578 Profil |
#5 · Zasláno: 18. 6. 2010, 15:56:45
Ono je úplně jedno kudy dotaz jde, jestli metodou GET nebo POST, důležité je nějakým způsobem ověřovat, jestli stahovaný soubor je jedním z těch, které stahovány mohou být.
|
||
wolfik Profil |
#6 · Zasláno: 18. 6. 2010, 16:01:03 · Upravil/a: wolfik
Stačilo by třeba, že stažený soubor nesmí mít příponu PHP?
Já mám všechny PHP soubory na kořenu a soubory ke stažení mám vždy alespoň ve složce "media", popřípadě v dalších podsložkách. Takže třeba regulární výraz, že soubor musí být ze složky "media" a zároveň nesmí mít příponu PHP. Je to dostatečná ochrana? |
||
wolfik Profil |
#7 · Zasláno: 18. 6. 2010, 23:20:57 · Upravil/a: wolfik
Dobrý den,
protože neumím napsat regulární výraz pro zjištění přípony souboru, svůj kód jsem upravil takto: <?php $soubor = $_GET['nazev']; $pripona = strtolower(substr($soubor,strrpos($soubor,'.') + 1)); if ($pripona="php") { exit; } header("Content-Description: File Transfer"); header("Content-Type: application/force-download"); header("Content-Length: ".filesize($soubor)); header('Content-Disposition: attachment; filename=' . basename($soubor)); readfile($soubor); ?> Bohužel to nefunguje, při kliknutí na odkaz se objeví jen prázdná stránka a nenapíše to žádnou hlášku. Poradíte mi prosím? |
||
abcOpy Profil * |
#8 · Zasláno: 19. 6. 2010, 01:28:24
wolfik:
„if ($pripona="php")“ Toto se vyhodnotí jako true pokaždé, máš tam mít "==". |
||
wolfik Profil |
#9 · Zasláno: 19. 6. 2010, 09:32:32
Ahaa. Děkuju
|
||
Časová prodleva: 14 let
|
0