buenas,
te dejo el codigo q uso yo para subir archivos:
en una pagina tengo un form donde se ponen los registros q quiero guardarme 
 Código HTML:
 <form enctype="multipart/form-data" name="form1" action="index.php?fuseaction=insert_foto" method="POST">
<table width="80%" cellpadding="2" cellspacing="0" class="list">
	<tr>
		<td class="listitem" valign="top">Imatge</td>
		<td class="listitem"><input name="userfile" type="file">
	</tr>
</table>
<p>
<input type="Button" class="boto" value="Guardar" onclick="envia();">
</form> 
 i en otra tengo la funcion para subir el archivo... 
 Código PHP:
    //direccion donde van los archivos
$uploaddir = '/home/http/img/fotos/productes/'; 
//nombre dl archivo (en mi caso lo uso para las fotos)
$nomfoto=$_FILES['userfile']['name'];
$uploadfile = $uploaddir . $_FILES['userfile']['name']; 
$uploadcheck = $uploadfile; 
 
if(empty($_FILES['userfile']['name'])){ 
$uploadfile = "";} 
// Ejecuta la verificación de que el archivo existe...
$verif = "N";
$verif=existe_arch($nomfoto,$verif,$uploaddir);
// Dependiendo de los valores anteriores se realiza la carga
function existe_arch($nomfoto,$verif,$uploaddir){
if ($gestor = opendir($uploaddir)) {
    while (false !== ($archivo = readdir($gestor))) { if ( $archivo == $nomfoto ) { $verif = "S"; } }
        closedir($gestor);
    }
return $verif;
}
if ($verif == "S") {
    echo "<script language=JavaScript>alert('El nombre del archivo ya existe, modifique el nombre y vuelva a intentarlo');</script>";
}else {
    print "<pre>"; 
    if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
        print "El archivo fue subido con éxito"; 
        print "Información del archivo:"; 
        print_r($_FILES); 
    } else { 
        print "El archivo no se pudo subir, información:\n"; 
        print_r($_FILES); 
    } 
    print "</pre>"; 
} 
    
  espero q te sirva, 
Saludos 
