No estoy de acuerdo con un detalle, con respecto al uso de la variable $_FILES['archivo']['type'].
Esta variable corresponde al tipo mime que le asigna el navegador a la cabecera del archivo, y algunos navegadores no asignan las cabeceras correctas.
Me parece que sería mucho mejor comprobar el tipo de archivo una vez que esté en el servidor.
Por ejemplo:
Código PHP:
$finfo = new finfo(FILEINFO_MIME);
$tipo = $finfo->file($_FILES['archivo']['tmp_name']);