PHP: Datei- und Bildtyp ermitteln

21 September 2009 in Code Snippets, PHP Kommentieren »

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.

1 Kommentar

  1. Gut erklärt. Danke. Find ich super.

    Gruß, Adnan

Einen Kommentar hinterlassen