Download a upload - dva pojmy, se kterými se "síťový brouzdal" setkává velice často, neboť miliony terrabytů obrázků, písniček, videí, cracků a dalších souborů "teče" po síti všemi směry. Zatímco k downloadu (stažení souboru ze serveru do klientského počítače) stačí třeba obyčejný HTML odkaz na soubor, s uploadem (nahrání souboru z klientského počítače na server) je to malinko složitější, ale také využijeme vlastností HTML. Samozřejmě pokud chceme někam ukládat soubor, je k tomu potřeba mít také příslušná oprávnění (práva) a v php.ini musí být upload také povoleno (opět přednastavená hodnota).

Upload souborů

Pro nahrání souboru na server využijeme formulář, jehož parametr enctype vypadá jinak než ty, které jsme doposud používali a pole input typu file, které umožní vyhledat soubory na disku:
<form enctype="multipart/form-data" action="" method="post">
<input type="file" name="soubor">

Po použití formuláře by se soubory nahrály do dočasné složky (podle nastavení v php.ini) a po ukončení prohlížeče (scriptu) by byly smazané, proto je potřeba pomocí scriptu soubory zkopírovat do vhodnější složky (v příkladu je využita složka s názvem soubory, která je ve stejné složce jako script). Ke zkopírování nebo přesunutí potřebujeme získat o souboru některé informace (přinejmenším název) - nemělo by vás už překvapit, že tyto informace najdeme v poli $_FILES:
$_FILES["soubor"]["name"] - název souboru
$_FILES["soubor"]["tmp_name"] - název dočasného souboru
$_FILES["soubor"]["type"] - typ souboru
$_FILES["soubor"]["size"] - velikost souboru

K přesunutí souboru z dočasné složky do jiné složky použijeme příkaz:
move_uploaded_file($nazev_souboru,$cil); - parametry jsou řetězce obsahující názvy, případně názvy s cestou
PHP má ještě další funkce pro práci se soubory (parametry jsou vesměs stejné):
copy($file,$file_novy) - kopírování souboru
rename($puvodni,$novy) - přejmenování souboru
unlink($file) - smazání souboru
filesize($file) - velikost souboru
fileCTime($file) - čas vytvoření souboru v sekundách od 1.1.1970, pro výpis data lze použít funkci date, například: $cas=fileCTime($file); date("d.m.Y",$cas);
fileMTime($file) - čas poslední modifikace souboru
fileATime($file) - čas posledního přístupu k souboru


Nyní už máme připraveno vše, co k nahrávání souborů na server pomocí PHP bude potřeba, ale jestli bude vše fungovat, to záleží na vašich oprávněních a nastaveních serveru (můžete vyzkoušet po domluvě i na našem školním).

Upload - konkrétní ukázka

Formulář snad není třeba ukazovat, jeho jádro je uvedeno v předešlém odstavci a je opravdu minimální. PHP script může být také kratinký, ale s novými funkcemi, proto ho uvádím celý (a tentokrát bez chyb :-) ):

<?php
if (isset($_FILES["soubor"]))
{echo "nazev:",$_FILES["soubor"]["name"];
$nazev_souboru=$_FILES["soubor"]["tmp_name"];
$cil="soubory/".$_FILES["soubor"]["name"]; //vytvořen řetězec ze slova soubory a názvu souboru
move_uploaded_file($nazev_souboru,$cil);
}
?>
Script se provede, pokud existuje proměnná se jménem soubor (viz parametr pole INPUT), čili formulář byl odeslaný. Vypíše se název souboru a vytvoří se řetězec cil spojením slova soubory (název složky, do které chceme kopírovat, tato složka je ve stejné složce jako stránka se scriptem) a názvu souboru. Posledním příkazem se soubor přesune z dočasné složky na místo určení :-).


Úkoly:

Úkol (3 body+prémie)

Přidej na index možnost uploadu přihlášeným uživatelům. Prémiové body můžeš získat za stylistiku :-) .

Název školy:Základní škola, Hradec Králové, M. Horákové 258
Název projektu:EU peníze školám
Číslo projektu:CZ.1.07/1.4.00/21.2575
Téma:Programování v PHP
Název:VY_32_INOVACE_16_10A_PHP16
Autor:Pavel Petr
Použité zdroje: Není-li uvedeno jinak, jsou všechny ilustrační obrázky dílem autora.