Guarda io uso sempre una cosa del genere, creata da me:

$Tmp_name = $_FILES['nomeCampoFile']['tmp_name'];
$Type = $_FILES['nomeCampoFile']['type'];
$Imm = $_FILES['nomeCampoFile']['name'];
$Size = $_FILES['nomeCampoFile']['size'];

$mime_list=array(".gif"=>"image/gif",".jpg"=>"image/jpeg",".jpg"=>"image/pjpeg");

$filename=basename($Imm);
$file_extension = substr($filename,strpos($filename,"."));
in_array($file_extension,array_keys($mime_list)) ? $permitted_type="SI" : $permitted_type = "NO";

if (is_uploaded_file($Tmp_name) && ($permitted_type=="SI")) {

$Imm='';
$nome_file="nuovoNome".$file_extension;

move_uploaded_file($Tmp_name,"../cartellaDestinazione/".$nome_file."") or die("Impossibile spostare il file, controlla l'esistenza o i permessi della directory dove fare l'upload1.");
chmod("../cartellaDestinazione/$nome_file",0755);


Prima prendo tutti i valori del campo del form, poi creo un'array con i tipi permessi e faccio un controllo sull'estensione. Poi verifico che sia stato fatto l'upload nella cartella temporanea dopodichè gli cambio il nome mantenendo l'estensione, l'ho spostato nella cartella di destinazione e ho modificato i permessi della stessa.

Sono stato chiaro?