Besser ist finfo( $strDateiname )
$finfo = new finfo( FILEINFO_MIME );
$mime = $finfo -> file( $file );
Aussenden:
header( 'Content-type: ' . $mime );
header( 'Content-Disposition: attachment; filename="' . urlencode( basename( $file ) ) . '"' );
readfile( $file );
Für die Symbole habe ich einfach eine nette Sammlung aus meinem Linux "raubmordkopiert" (z.B. aus [/usr/share/icons/breeze/mimetypes/32/](file:///usr/share/icons/breeze/mimetypes/32/)). Ich musste nur wenige umbenennen, weil finfo und die Icons leider nicht in jedem Fall übereinstimmen.
function getFilesymbol( $mime ) {
$mime = str_replace ( '/', '-', $mime );
if ( is_file( $_SERVER['DOCUMENT_ROOT'] . 'pics/mime/' . $mime . 'png' ) ) {
return '/pics/mime/' . $mime . 'svg';
} else {
return '/pics/mime/unknown.svg';
}
}