Scusa, ma hai controllato cosa viene passato allo script php?

Prima che la chiamata ajax parta, qual è il valore della variabile "upfile" ?

Guarda con firebug sul pannello net e guarda sulla request cosa esattamente viene passato in post

Inoltre se la cartella "allegati" è pubblica (senza se : deve esserlo, altrimenti non riusciresti a cercare in una sottocartella a partire dalla cartella in cui si trova questo script), penso che tu stia creando più complessità di quella necessaria. Se vuoi semplicemente sapere se esiste o meno un file sotto quella cartella ti basta fare una chiamata HEAD al file stesso:

codice:
function controllaFile(){ 
    //recupero il nome del file 
    var upfile = "allegati/" +  document.getElementById("upfile").files[0].name; 
    alert('cerco il file ' + upfile);

    $.ajax({ 
        type: "HEAD", 
        url: upfile,
        success: function() { 
            alert('il file esiste');
        },
        error: function() {
            alert('il file non esiste');
        }
    })
};
prova questo codice e se non funziona posta esattamente il messaggio d'errore, le info dettagliate sulla request e sulla response