Autor Zpráva
stuchlej
Profil
Dobrý den.
Potřebuji na stránky uploadovat se MySQL do databáze ještě *.pdf soubor. Hledal jsem proto možnosti, jak se dá uploadovat na serwer a našel jsem si pro tento účel tento hezký skript:
<?
if($_POST['z'] == "upload")
    {
    $i = 0;
        if ($_FILES['priloha']['error'][$i] && $_FILES['priloha']['error'][$i] != 4) { echo "<br>".$i."-".$upload_err[$_FILES['priloha']['error'][$i]]; continue; }
        $jmeno_prilohy[$i] = namefriendly($_FILES['priloha']['name'][$i]);        //echo "<br>jmeno_prilohy=".$jmeno_prilohy[$i] ;
        $filename = time()."-".$i."-".$jmeno_prilohy[$i];
        $cesta[$i] = "data/events/".$filename ;                 //echo "<br>cesta=".$cesta[$i];
        if (move_uploaded_file($_FILES["priloha"]["tmp_name"][$i],$cesta[$i]))    echo "<br>soubor ".$_FILES['priloha']['name'][$i]." nahrán." ;
       
    }
    
    
function namefriendly($text)
    {
    $text = Strtolower($text);
    $text = (StrTr($text, "áäčçďéěëíňóöřšťúůüýž", "aaccdeeeinoorstuuuyz"));
    $text = eregI_replace("[^abcdefghijklmnopqrstuvwxyz0123456789\.]+","-",$text);
    $text = ereg_replace("-\.",".",$text);
    $text = ereg_replace("\.+",".",$text);
    return $text;
    }
        
?>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="z" value="upload">
Přiloha :<input class="file" type="file" name="priloha[0]"  >
<input type="submit" value="odeslat"> 
</form>


Fonguje skvělel, ale co mě vadí je, že musím mít nastavená práva přístupu v cílovém adresáři na 777. Moje otázka zní: Jaké z toho plyne nebezpečí? Není nějaká lepší funkce na upload souorů?

Děkuji.
johnl
Profil
stuchlej:
Myslím, že to není nic závažného pokud neumožníš nějakým neošetřeným vstupem návštěvníkovy se soubory pracovat. Tvůj script umožňuje nahrát jakýkoliv soubor, třeba i php, pak nastává právě ta nebezpečná situace.

PS: Existuje jen server, serwer nee..
motik
Profil
stuchlej:
jinak by měly stačit i práva 700 (755), ale tak jak naznačil johnl je dobré ošetřit ty přípony.
stuchlej
Profil
Děkuji moc.
Jen se chci zeptat, napadlo mě, zda tu není možnost natáhnout tan .pdf soubor do MySQL, pokud je a je to lepší řešení, jak?
Děkuji
Edit:
Mimochodem... jak zjistím jaká je přípona souboru? Vím, že jsou na to regulérní výrazy, ale navím, jak ho mám použít. Tím myslím, že nevím, jakou proměnou bych měl nechat regulernímu výrazu porovnat. Děkuji
motik
Profil
stuchlej:
zkus si dát za podmínku $_POST['z']:
echo "<pre>";
  print_r($_FILES['priloha']);
echo "</pre>";
stuchlej
Profil
Děkuji dodám odpověď, že typ souboru se skovává v $_FILES['priloha']['name'][0].
stuchlej
Toto téma je uzamčeno. Odpověď nelze zaslat.

0