L'array $_FILE ha una struttura fatta così (questi di sicuro, non so se altri)
$_FILES["upload"]["name"]: nome del file caricato;
$_FILES["upload"]["type"]: tipo di file caricato (in formato mime type, quindi tpo image/png);
$_FILES["upload"]["size"]: dimensione del file caricato;
$_FILES["upload"]["tmp_name"]: percorso e il nome del file temporaneo sul server;
$_FILES["upload"]["error"]: un codice numerico compreso fra 0 e 8 indicante il tipo di errore che si è verificato, pari a 0 in assenza di errore.
Per fare i tuoi controlli, in particolare dimensione ed estensione puoi utilizzare questi e risparmiare righe di codice e leggibilità.