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).
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).
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í :-).
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 |