Upload souboru přes PHP

Práva na linuxuPokud potřebujete otestovat, zda na Vašem webu funguje upload souborů na server přes php skript, můžete použít následující velmi jednoduchý příklad.

Skript nahrajete do libovolného adresáře, do kterého je povolen zápis (další podrobnosti o právech na serverech s linuxem najdete v tomto příspěvku) na pak ho zavoláte přes prohlížeč. Například je-li nahraný do adresáře test v rootu webu (adresář /www/test), napište do prohlížeče: http://www.domena.koncovka/test/upload.php.

Při praktickém použití ještě vložte podmínky pro omezení velikosti souboru, povolené typy soubory (třeba jen obrázky, text...).
<HTML>
<HEAD><TITLE>PHP: Upload souboru</TITLE></HEAD>
<BODY>
<b>Zadejte jmeno souboru:</b>
<FORM ACTION="upload.php" METHOD="post" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="soubor" SIZE="40">
<INPUT TYPE="submit" NAME="ok" VALUE="Upload">
</FORM>
<?php
$soubor_name = ($_FILES["soubor"]["name"]);
$soubor = ($_FILES["soubor"]["tmp_name"]);
$ok = ($_POST["ok"]);
 
if ($ok == "Upload" && $soubor_name!="")
{
    if (move_uploaded_file($soubor, "./$soubor_name"))
        {
        chmod ("./$soubor_name", 0646);
        echo "<b>Soubor $soubor_name byl nahran na server</b><BR>";
        }
    else
        {
        echo "<b>Chyba - soubor nebyl nahran</b><BR>";
        }
}
?>
</BODY>
</HTML>

(Skript si můžete i stahnout - po pravé straně této stránky je seznam souborů)
 
Vlastníkem uploadovaného souboru je Apache (pod kterým je spouštěn php skript). Protože defaultní práva uploadovaného souboru jsou 600 (viz. příspěvek ), nelze pak s takto nahraným souborem manipulovat přes FTP. Z toho důvodu je těsně po uploadu zavolána funkce chmod pomocí které nastavíme práva tak, aby mohl FTP uživatel soubor změnit/smazat - tzn. 646 (čtení a zápis vlastníkem a ostatními a čtení skupinou).