Mira, éste código utilizo yo para subir archivos y funciona perfecto. Echale una mirada e intenta reelaborar tu código.
Código:
if (is_uploaded_file($_FILES["foto_upload"]["tmp_name"])){
move_uploaded_file($_FILES["foto_upload"]["tmp_name"], $ruta);
$estado = "Archivo subido: <b>".$archivo."</b>";
echo $estado;
}elseif(!move_uploaded_file($_FILES["foto_upload"]["tmp_name"], $ruta."".$archivo)){
$estado = "Archivo No subido: <b>".$archivo."</b>";
echo $estado;
}
Saludos.