ti dice che praticamente secondo lui non stai uploadando nulla..
io l'ho fatto sotto linux.. e mi funzionava.. comunque intanto
$upload_dir = $_SERVER["DOCUMENT_ROOT"] . "public";
senza lo slash, come prima era areariservata senza slash.

fai un po' di prove facendo gli echo delle variabili tipo

Codice PHP:
<?php
/*Compatibilità con le versioni di php precedenti alla 4.1.0*/
if(!isset($_FILES)) {
$_FILES $HTTP_POST_FILES;
}
if(!isset(
$_SERVER)) {
$_SERVER $HTTP_SERVER_VARS;
}
/*Nuovo nome da dare al file uploadato, può anche non essere assegnato*/
$nuovo_nome "";
//*Percorso assoluto della cartella dove si desiderano salvare i files uploadati, la cartella deve avere i permessi 777*/
$upload_dir $_SERVER["DOCUMENT_ROOT"] . "public";
/*Se non è stato indicato un nuovo nome, il nome del file sarà lo stesso di quello uploadato*/
if ($nuovo_nome==""){
$nuovo_nome=$_FILES['upfile']['name'];
}else{
$nome_file=$nuovo_nome;
}
echo 
"variabile rinominata: " .  $nuovo_nome "
"
;
echo 
"nome originale: " $_FILES['upfile']['name'];
/*Controllo il nome del file per verificare se è stato uploadato*/
if(trim($_FILES['upfile']['name']) == "") {
die(
"Devi indicare il file che desideri caricare");
}
// ECCETERA
ah!! e riprova magari se non va coi doppi apici anche se non credo sia quello...