Non ti fidare dell'estensione, quando carichi un file conviene controllare sempre il MIME type.

Potrei infatti, prima di caricarlo, modificare il nome di un eseguibile da evil.exe a evil.pdf, e l'upload andrebbe comunque a buon fine

Piuttosto utilizza mime_content_type() oppure finfo_file()