Manuál PHP | ||
---|---|---|
Předcházející | Další |
PHP umožňuje zpracování uploadu souborů z jakéhokoli prohlížeče vyhovujícího RFC-1867 (což zahrnuje mj. Netscape Navigator 3 a pozdější, Microsoft Internet Explorer 3 se záplatou od Microsoftu, nebo pozdější bez záplaty). Tato schopnost umožňuje lidem uploadovat textové i binární soubory. S autentizací poskytovanou PHP a s funkcemi pro manipulaci se soubory máte plnou kontrolu nad tím, kdo smí uploadovat a co se má udělat s uploadovaným souborem.
Nezapomeňte, že PHP podporuje také uploady metodou PUT tak, jak se používá v Netscape Composeru a v editoru Amaya od W3C. Pro bližší detaily viz Podpora metody PUT.
Obrazovka pro upload souboru může být tvořena speciálním formulářem, který vypadá podobně jako tento:
Varování |
Hodnota MAX_FILE_SIZE je z hlediska prohlížeče pouze informativní. Je snadné ji obejít. Takže nepočítejte s tím, že prohlížeč se bude chovat tak, jak si přejete. Nastavení maximální velikosti v PHP však samozřejmě nemůže být obelstěno. |
Proměnné definované pro uploadované soubory se liší v závislosti na verzi a konfiguraci PHP. Pokud je aktivní volba track_vars, bude inicializováno pole $HTTP_POST_FILES/$_FILES. Konečně, související proměnné mohou být inicializovány jako globální, pokud je zapnuta volba register_globals. Ovšem používání globálních proměnných není doporučeno. Po úspěšném uploadu budou v cílovém skriptu definovány následující proměnné:
Poznámka: track_vars je od PHP 4.0.3 vždy zapnuto. U PHP 4.1.0 a pozdějších může být použito $_FILES namísto $HTTP_POST_FILES. $_FILES je vždy globální proměnná, takže by se neměla používat specifikace global pro proměnnou $_FILES.
$HTTP_POST_FILES/$_FILES obsahuje informace o uploadovaném souboru.
Obsah $HTTP_POST_FILES je takovýto (uvědomte si, že se předpokládá použití názvu uploadovaného souboru 'userfile' tak, jako v příkladu výše):
Originální název souboru na klientském počítači.
MIME typ souboru, pokud prohlížeč tuto informaci poskytuje (např. "image/gif").
Velikost uploadovaného souboru v bytech.
Dočasný název souboru, pod nímž byl uploadovaný soubor uložen na server.
Poznámka: PHP 4.1.0 a pozdější podporují zkrácený název proměnné $_FILES. PHP 3 nepodporuje $HTTP_POST_FILES.
Obsah proměnnách v situaci, kdy je proměnná register_globals zapnuta nastavením v souboru php.ini (uvědomte si, že se předpokládá použití názvu uploadovaného souboru 'userfile' tak, jako v příkladu výše):
$userfile - Dočasný název souboru, pod kterým byl uploadovaný soubor uložen na server.
$userfile_name - Originální název souboru nebo cesta na odesílajícím systému.
$userfile_size - Velikost uploadovaného souboru v bytech.
$userfile_type - MIME typ souboru, pokud prohlížeč tuto informaci poskytuje (např. "image/gif").
Poznámka: Nastavení register_globals = On se nedoporučuje z bezpečnostních a výkonnostních důvodů.
Soubory se implicitně ukládají do systémového adresáře pro dočasné soubory, pokud nebylo direktivou upload_tmp_dir v souboru php.ini stanoveno jinak. Systémový adresář pro dočasné soubory může být změněn nastavení proměnné prostředí TMPDIR v prostředí, kde PHP běží. Nastavení za použití putenv() z PHP skriptu nebude fungovat. Tato proměnná prostředí může být také použita k ujištění se, že všechny ostatní operace pracují s uploadovanými soubory.
Příklad 18-2. Ověřování uploadu souboru Následující příklady jsou pro verze PHP 4 vyšší než PHP 4.0.2. (viz funkce is_uploaded_file() a move_uploaded_file()).
|
PHP skript, který přijímá uploadované soubory, by měl implementovat veškerou logiku pro stanovení, co by se mělo udělat s uploadovaným souborem. Můžete např. použít proměnnou $HTTP_POST_FILES['userfile']['size'] pro zahození souborů, které jsou příliš malé nebo velké. Mohli byste použít také proměnnou $HTTP_POST_FILES['userfile']['type'] pro filtraci souborů podle MIME datového typu. Bez ohledu na řešení, soubor by měl být smazán nebo přesunut jinam.
Soubor bude automaticky smazán z dočasného adresáře na konci skriptu, pokud nebyl přesunut jinam nebo přejmenován.
Předcházející | Domů | Další |
Cookies | Nahoru | Častá úskalí |