salut Toinou !
voici quelques pistes que je pourrais te donner.
d'abord pour sélectionner un format de fichier valide. je te conseille de tester le type MIME de ton fichier d'upload et non pas l'extension. et aussi de deviner ce type mime en utilisant la classe finfo. En gros cela détermine le type MIME à partir du contenu du fichier et non à partir de l'extension.
du coup faire ton contrôle de format de fichier à partir de ce $mimeType.
tu peux voir une implémentation complète (et non grossière comme je te l'ai fait ci dessus) d'un FileinfoMimeTypeGuesser avec le framework Symfony : FileinfoMimeTypeGuesser.php
ensuite je te conseille de ne pas stocker le fichier avec le nom fournit par l'utilisateur mais d'abord de filtrer ce nom pour retirer tous caractères spéciaux, indésirables et suceptibles de te créer des problèmes par la suite.
au besoin tu peux stocker dans ta base de donnée le nom de fichier à lui (pour pouvoir lui restituer) et le nom de fichier réel
Tu as cette classe qui fait très bien le travail Urlizer
et enfin d'y suffixer l'extension devinée à partir du type Mime et non l'extension proposée par l'utilisateur
voilà quelques pistes. j'imagine qu'il peut y en avoir d'autres, que dit la communauté ?