Jednoduchý upload souboru na server pomocí PHP
Někteří z vás si psali o článek pojednávajícím o uploadu souboru na server. V dnešním článku vám popíšu jednoduchý upload souboru do vybraného adresáře, bez použití databáze. Úspěšný upload bude doprovázen posláním informačního e-mailu na adresu správce serveru.
Úvodní formulář
Nejprve vám představím kód jednoduchého formuláře, jehož prostřednictvím se bude upload souboru na server realizovat.
|
Nyní uvedu pár komentářů k uvedenému formuláři. Oproti běžným formulářům jsou zde nějaká rozšíření. Protože chci přenést soubor, zadefinoval jsem hodnotu atributu ENCTYPE na „multipart/form-data“. Standardní hodnotou, jak asi víte, je totiž „application/x-www-form-urlencoded“. Takové kódování je ale pro náš případ nepoužitelné. Pokud je použito kódování „multipart/form-data“ je nutné použít pro přenost metodu POST. Pro zadání názvu souboru je vstupní pole typu „file“, které umožní uživateli soubor také vybrat z klasického okna pro výběr souboru.
Zpracování formuláře
Po stisknutí tlačítko „Upload“ je zavolán skript upload.php, který nyní zpracuje požadavek. Uploadnutý soubor je dočasně přístupný přes proměnnou $soubor, resp. skrze několik proměnných, které mají řetězec „soubor“ uveden jako prefix. Jsou to:
- $soubor – obsahuje jméno dočasného souboru, do kterého nám php skript soubor uložil
- $soubor_type – obsahuje MIME typ souboru
- $soubor_size – velikost uploadnutého souboru v bajtech
- $soubor_name – původní název souboru na uživatelském počítači
Nyní uvedu zdrojový soubor jednoduchého skriptu upload.php, který pak následně blíže popíšu.
|
Popis skriptu
Spodní část je jasná, ta zobrazí formulář pro upload souboru. V první části skriptu je nejdříve dotaz, zdali bylo stisknuto tlačítko „Upload“ a pokud ano, provede se kontrola, zdali zadaný soubor je požadovaného MIME typu. Jestliže ano, pak se provede zkopírování souboru do vyhrazeného adresáře data/, pod takovým názvem, jaký byl u uživatele. Pokud kopírování proběhne úspěšně, vypíše se informační hláška na obrazovku prohlížeče a po té se pomocí funkce mail pošle e-mail na adresu správce serveru, že byl uploadován nový soubor.
Funkce mail funguje jen v případě, že je správně nastaven server. Nastavení lze provést v souboru php.ini (direktivy SMTP a sendmail_from). V případě, že soubor nebude mít odpovídající MIME typ, vypíše se hláška a soubor na server uploadován nebude.
Skript si můžete stáhnout zde. Otestován byl na IIS 5.0 a PHP 4.0.6. Ve skriptu v argumentech funkce mail si musíte samozřejmě nastavit vlastní server a svou e-mailovou adresu.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
použil sem váš skript na upload ale nejede mi vypadá to že nemám správný typ souboru označen u vás jako MIME. jak jej mám upravyt pro obrázky *.JPG
2Lukáš:
do druhe podminky pridejte MIME typ pozadovanych souboru
or $soubor_type==“image/jpeg“ or $soubor_type=“image/pjpeg“ or $soubor_type=“image/jpg“
pripadne muzete i image/gif, image/png atd :o)
Zkoušel jsem skript použít, ale soubor se nevytvoří (přístupová práva OK), ani se neobjeví žádné hlášení, po kliknutí na tlačítko se zobrazí stejný prázdný formulář jako na začátku.
Adam:
Zdravím, mám zřejmě tentýž problém co dotyčný Lukáš, ale nevím do jaké druhé podmínky přidat MIME?
To není řešení, Tohle je prasečina!
Nezlobte se na mě, ale je to napsané v register globals -on a na přenos souboru semísto move_uploaded_file(„tmp_name“,“cíl“) použitá ne dvakrát bezpečná f-ce copy()
ked dam upload vypise mi v upload.php – undefined variable: akce in c:\wamp…\upload.php on line 15 . co s tym?
Saphire: jaka prasecina? Vzdyt je to clanek z roku 2001, kdy se pouzivalo uplne jine PHP nez dnes.
totok je kotel starej script , uz 11 let, je mozny, ze uz neni funkcni….