Wer beispielsweise mit Uploadformularen arbeitet oder Bilder durch eine PHP Datei weiterleitet kommt früher oder später an einen Punk, an welchem der entsprechende Dateityp der Datei ermittelt werden soll. Je nach Anwendungszweck gibt es verschiedenen Möglichkeiten die Dateierweiterung oder den MIME-Typ zu ermitteln:
MIME-Typ im $_FILES Array
Direkt nach dem Upload einer Datei stehen im $_FILES Array folgende Angaben zur Verfügung:
- name: Originaler Dateiname der Datei
- type: MIME-Typ der Datei
- size: Größe in Bytes
- tmp_name: Name unter welchem die Datei auf dem Server zwischengespeichert wurde
- error: Statuscode des Uploadvorgangs
In type finden wir also den gesuchten MIME-Typ der Datei und können diesen weiterverarbeiten:
<?php
if ($_FILES['myUpload']['type'] == 'image/png') {
// Nur PNG-Grafiken verarbeiten
// ...
}
?>
MIME-Typ durch getimagesize()
Um den MIME-Typ bei Bildern auch im nachhinein noch zu ermitteln kann man die Funktion getimagesize() benutzen, welche folgende Daten zurück liefert:
- 0: Breite des Bildes
- 1: Höhe des Bildes
- 2: PHP spezifische Bildtyp Konstante
- 3: Maßangaben als HTML Attribut
- mime: MIME-Typ der Datei
Hier finden wir unter mime den gesuchten Typen:
<?php
$file = 'bild.png';
$image_data = getimagesize($file);
if ($image_data['mime'] == 'image/png') {
// Nur PNG-Grafiken verarbeiten
// ...
}
?>
Kleiner Hinweis zu den gängigsten Bildtypen, neben image/png und image/gif muss für JPG Bilder immer image/jpeg, also die lange Form genutzt werden. Wer auf der sicheren Seite sein will fügt zusätzlich noch image/pjpeg seiner Abfrage hinzu. Das p steht für progressiv und gerade der IE sendet diesen Typ bei JPGs gerne mit. Hier noch eine kleine Kontrollabfrage als Beispiel:
<?php
// Erlaubte Bildtypen
$mime_list = array('image/jpeg', 'image/pjpeg', 'image/png', 'image/gif');
// Dateiupload auf gültigen Typ prüfen
if (!in_array($_FILES['myupload']['type'], $mime_list)) {
echo 'Es sind nur Dateien vom Typ JPG, PNG und GIF erlaubt.';
} else {
// Daten weiterverarbeiten
// ...
}
?>
Erweiterung im Dateinamen
Soll dagegen die Dateierweiterung direkt ermittelt werden, so muss man den Dateinamen zerlegen:
<?php
// Dateierweiterung auslesen
function get_file_ext($filename) {
return strtolower(substr(strrchr($filename, '.'), 1));
}
// Beispielaufruf
$file = 'download.zip';
echo get_file_ext($file); // = zip
?>
Die Funktion liefert immer die Erweiterung hinter dem letzten Punk in Kleinbuchstaben.
Gut erklärt. Danke. Find ich super.
Gruß, Adnan