In der Welt des Internets kann jede Datei eindeutig einem MIME-Type zugeordnet werden. Die Definition des MIME-Types besteht aus zwei Teilen, die mit Schrägstrich (Slash /) getrennt werden:
Medientyp (die "Familie")/Subtyp.
Für ein PNG-Bildes sieht das also so aus: image/png. Der zweite Teil, der Suptyp, entspricht oft der Dateiendung, dies ist aber nicht immer so.
Browser und Server reden miteinander, bevor sie Dateien tauschen. Unter anderem Sie kündigen zuerst an, welche Art von Datei verschickt wird. Dazu dient der MIME-Type. Im Bild sieht man die Vorankündigung vom Server:

Bildquelle: Seobility Wiki
Beim Datei-Upload kündigt der Browser an, welcher MIME-Type die Datei haben wird, die hochgeladen werden soll. Leider kann das jedoch gefaked werden, du als Entwickler:in kannst dich also nicht darauf verlassen.

Bildquelle: Tambako The Jaguar auf Flickr
Viel besser ist es, sich nicht auf die Vorankündigung des Brosers zu verlassen, sondern mit PHP am MIME-Type der Datei zu schnüffeln, wenn diese auf dem Server angekommen ist und in der Quarantäne-Station im temporären Verzeichnis liegt (s. Beispiele).