[PHP] - Mime-Type auslesen

fliegenkiller

Lt. Junior Grade
Registriert
März 2005
Beiträge
387
Hallo,

Ich erweitere meine Mail Klasse um die Methode addFile($file) welche die übergebene Datei als Attachment anfügt. Nun habe ich das Problem, dass ich den genauen Mimetyp benötige.
Ich habe dies mit der Funktion mime_content_type() probiert, doch diese liefert nur einen Fatal Error, da die Funktion scheinbar nicht existiert, jedoch ist sie auf php.net sowie im Zend IDE vermerkt.

Call to undefined function mime_content_type()

Kann mir jemand helfen, wie ich die Funktion "wiederfinden" kann oder eine andere Methode nennen, mit der den Dateityp herausfinden kann?

MfG
 
Hat niemand eine Idee, wie man in PHP den Mime-Typ einer Datei erkennen kann?
 
Hallo fliegenkiller,

die ext/mimetype ist seit der Einführung des PECL-Moduls Fileinfo obsolet und wird i.d.R. nicht mehr mitkompiliert, daher steht auch die Funktion mime_content_type() nicht mehr zur Verfügung. Fileinfo findest du im PECL-Repository, die Windows-DLLs wie gehabt bei PECL4win.

Sollte neben ext/mimetype auch Fileinfo nicht installiert sein und du keine Möglichkeit haben diese zu ergänzen, bleibt dir nur der Weg zu Fuß, d.h. du müßtest die magic-Datei parsen und die zu untersuchenden Dateien nach den Magic-Bytes durchforsten, das ist zwar eigentlich trivial, aber ist natürlich deutlich langsamer als mit den vorgesehenen Funktionen/Klassen.

greetings, Keita
 
Danke für die Antwort, nun ist mir einiges klar.
Komischerweise ist es so, dass wenn man eine Datei herauflädt, im $_FILE[] Array einen Eintrag des Mime-Typ existiert.
$_FILES['userfile']['name']
$_FILES['userfile']['type']
$_FILES['userfile']['size']
$_FILES['userfile']['tmp_name']
$_FILES['userfile']['error']

Bei einer heraufgeladenen Datei, existiert ein Mime-Eintrag in $_File Array, jedoch nur, wenn der Browser die Daten mit übermittelt.
 
Auf die Daten in $_FILES kann, sollte und darf man nicht vertrauen, weil sie wie alles, was von außen in das Skript importiert wird, nicht vertrauenswürdig sind.
Der Wert von type entspricht üblicherweise dem, was der Browser meint senden zu wollen, bei Windows bspw. wird dazu der Content-Type der Datei-Endung aus der Registry ausgelesen. Daß es auch mitunter in die Hose gehen kann, sieht man u.a. beim Internet Explorer, dieser sendet bei einer JPEG-Datei gerne image/pjpeg anstelle von image/jpeg, was später zu Problemen führen kann, wenn man nicht damit rechnet ;)
Es ist natürlich auch möglich eine "ausführbare" Datei mit einem unverfänglichen Content-Type zu übermitteln, was ja auch gerne in Spam gemacht wird, aus diesem Grund würde ich generell mit Fileinfo o.ä. den tatsächlichen Typ der Datei ermitteln. Wenn man sich auf Grafikdateien beschränken möchte bzw. kann, tut es zur Not auch die Funktion getImageSize(), diese liefert u.a. auch den Typ einer Grafik als numerische Konstante, wenn es sich bei der Datei um eine Grafik handelt.

greetings, Keita
 
Hatte ich es mir doch gedacht. Wie immer: Alles was von aussen (von Usern) ins System kommt ist grundsätzlich nicht vertrauenswürdig. Ich werde mal nachschauen ob es in der Pear Bibliothek etwas vernünftiges gibt. Bis jetzt habe ich mich noch nicht so stark nit PEAR beschäftigt.
 
Zurück
Oben