Nie bardzo wiem po co stosowac funkcje copy przy formularzu?

Raczej jest ona wykorzystywana przy kopiowaniu z serwera na serwer.
Do upload'owania pliko z formularza wykorzystywana jest funkcja
move_uploaded_file()
A wiec najprostrza wersja przesylania z formularza:
formularz.html
Kod
<form action="formularz.php" enctype="multipart/form-data"> //pamietaj o tym ze musi byc takie enctype inaczej nie zadziala!!!!
<input type="file" name="plik">
<input type="submit" value="Wyślij">
</form>
formularz.php
Kod
$nazwa=$_FILES['plik']['name'];
$tmp = $_FILES['plik']['tmp_name'];
move_uploaded_file($tmp,"katalog/$nazwa");
//gdzie pierwszy parametr to nazwa pliku (tymczasowa- poczytaj manuala na php.net do tej funkcji i tablicy $_FILES, to dowiesz sie dlaczego jest nazwa tymczasowa) a drugi parametr to sciezka gdzie katalogiem domowym jest katalog w ktorym sa te pliki)
Nie dodalem jesli chcesz miec inna nazwe pliku to zmien sobie $nazwa na cos innego tylko moze w jakiejs petli aby dodawalo Ci np numer do nazwy. Bo w takim opisie jak ja podalem to zapisze z taka nazwa jak mial uzytkownik na kompie.
Jak doczytasz sie w manualu to funkcja move_uploaded_file() pliki o takiej samej nazwie nadpisuje. Wiec jesli bedziesz zmienial nazwe to wymysl cos aby Ci jakos dynamicznie zmienialo ta nazwe.
I jeszcze jedna rzecz kod ktory podalem jest najprostrzym kodem do upload'u mozesz sobie uzyc jakiegos if do sprawdzania czy plik zostal upload'owany, albo jak sie doczytasz w manualu tablica $_FILES jest zawsze dwu wymiarowa i oprocz name, tmp_name ma jeszcze kilka parametrow, np size, type wiec mozesz sobie dorobic sprawdzanie czy plik jest odpowiedniego typu ma odpowiedni rozmiar itd....