Autor Zpráva
wolfik
Profil
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
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
Řá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
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
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
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
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 *
wolfik:
if ($pripona="php")
Toto se vyhodnotí jako true pokaždé, máš tam mít "==".
wolfik
Profil
Ahaa. Děkuju

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0