OK. Původní skript od JJ vypadá takhle (taky nevím, proč ho smazal

):
Kód: Vybrat vše
<html>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="soubor1"><br>
<input type="file" name="soubor2"><br>
<input type="file" name="soubor3"><br>
<input type="file" name="soubor4"><br>
<input type="file" name="soubor5"><br>
<input type="submit" value="Uložit">
</form>
<?php
if (is_uploaded_file($_FILES["soubor1"]["tmp_name"])):
$name = $_FILES["soubor1"]["name"];
copy($_FILES["soubor1"]["tmp_name"],"$name");
endif;
if (is_uploaded_file($_FILES["soubor2"]["tmp_name"])):
$name = $_FILES["soubor2"]["name"];
copy($_FILES["soubor2"]["tmp_name"], "$name");
endif;
if (is_uploaded_file($_FILES["soubor3"]["tmp_name"])):
$name = $_FILES["soubor3"]["name"];
copy($_FILES["soubor3"]["tmp_name"], "$name");
endif;
if (is_uploaded_file($_FILES["soubor4"]["tmp_name"])):
$name = $_FILES["soubor4"]["name"];
copy($_FILES["soubor4"]["tmp_name"], "$name");
endif;
if (is_uploaded_file($_FILES["soubor5"]["tmp_name"])):
$name = $_FILES["soubor5"]["name"];
copy($_FILES["soubor5"]["tmp_name"], "$name");
endif;
?>
</body>
</html>
Dovolím si ho zjednodušit na jeden uploadovaný soubor a nepatrně rozpitvat. Takže tentýž redukovaný kód:
Kód: Vybrat vše
<html>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="soubor1"><br>
<input type="submit" value="Uložit">
</form>
<?php
if (is_uploaded_file($_FILES["soubor1"]["tmp_name"])):
$name = $_FILES["soubor1"]["name"];
copy($_FILES["soubor1"]["tmp_name"],"$name");
endif;
?>
</body>
</html>
• HTML form je jasnej, takže k php skriptu:
• skript předpokládá, že v php.ini souboru serveru je jako defaultní adresář pro koš definován /tmp (řádek upload_tmp_dir). Dále předpokládá, že je v php.ini povoleno ukládání souborů na server. Pokud je tato funkce v php povolena, bývá definována i maximální velikost souboru - skript opět nijak neřeší.
• skript ukládá proměnnou $name do pole $_FILES - ovšem funkce tohoto pole je podporována až od verze jazyka PHP4. Použití této verze není pravidlem (třeba
www.ic.cz ). V tomto případě je potřeba využít funkci pole podporovaného nižšími verzemi, tedy $HTTP_POST_FILES se stejnou syntaxí.
• na serveru bude nutný adresář, do kterého bude soubor nahrán. Poskytovatel hostingu Ti dává jedinou možnost - využít přiděleného omezeného prostoru v rámci webové prezentace. Ovšem skript obsahuje chybu - neřeší vytvoření adresáře, čili soubory nebudou kam nahrát. Cesta, zadaná jako parametr příkazu copy, odkazuje na root a obsahuje syntaktickou chybu, která může, ale nemusí (podle nastavení serveru) být správně interpretována a soubory do rootu uploadovat.
• protože jde o jednorázovou operaci, lze vytvoření adresáře řešit místo dynamickým generováním vytvořením adresáře třeba přes FTP. V tomto případě je třeba toto zohlednit v parametru příkazu copy a současně ošetřit situaci, kdy dojde k uploadu souboru, který již v adresáři existuje - soubor se stejným názvem jinak bude bez upozornění přepsán.
• není vyřešeno ošetření vstupních polí - zejména velikost a typ souboru. Upload exe souboru a jeho následný pokus o stažení může u špatně konfigurovaného serveru způsobit jeho spuštění se všemi důsledky. Lze vyřešit přímo v php, případně lépe ošetřit formulářová pole javascriptem tak, aby byl uživatel upozorněn na špatný input ještě před provedením rutiny post.
• v původním skriptu je implicitně nabídnuta možnost uploadu pěti souborů najednou. V případě rychlé linky s tím nebude problém, v případě modemu ano - u velkých souborů dojde po určité době, dané nastavením serveru pro maximální dobu běhu skriptu, k přerušení komunikace.
Znovu doporučuji pro upload fotek na server využít databázi, a to nejlépe tak, že využiješ již existujících free php aplikací (třeba zmiňovaná galerie tady na pct, info a download najdeš na
http://coppermine.sourceforge.net/ ), s konfigurací Ti (rád

) poradí Miho...
Pokud chceš využít okopírovaný skript od JJ, musíš udělat následující:
• ověřit si, zda daný hosting podporuje PHP4, upload souborů na server a jeho adresář pro koš je /tmp - v případě wz.cz tohle platí, ale není to univerzální.
• vytvořit adresář pro uploadované soubory - třeba v rootu svého webového prostoru adresář fotky.
• opravit parametr funkce copy tak, aby odkazovala na vytvořený adresář - tedy v případě adresáře fotky v rootu takhle
Kód: Vybrat vše
copy($_FILES["soubor1"]["tmp_name"],"./fotky/$name")
• musíš si být vědom všech rizik - viz výše, zejména upozorním na možné překročení diskové kvóty přidělené správcem hostingu a problémů s velikostí a typem souborů.