Ciao,
la variabile $php_self è il nome del file in cui è contenuta.
Comunque, per ridurre al massimo le possibilità di errori l'ho sostituita con il nome del file a cui deve puntare il form.

Per la gestione del file ho usato la coppia is_file_uploaded e move_uploaded_file come mi hai consigliato per avere la certezza assoluta che tutto sia al posto giusto.
Questa è la parte di codice che ho variato.

if ($file){
$verifica = is_uploaded_file($file);
if ($verifica == "false"){
echo 'file non uploadato';
exit;
}
move_uploaded_file($filetmpname, "ftp/$cartella/$file");
echo 'il file "'.$file.'" è stato copiato nella cartella "'.$cartella.'"
';
}

Il risultato purtroppo è lo stesso: con i file di dimensioni piccole tutto ok, mentre quelli grossi non li carica.

?????????????????