Gibt es eine schnelle und schmutzige Zuordnung von MIME-Typen zu Erweiterungen in PHP, die ich nutzen kann?
Ich glaube, dies ist eine alte Antwort. Jetzt sollten Sie verwenden fileinfo
php.net/handbuch/de/ref.fileinfo.php
Gibt es eine schnelle und schmutzige Zuordnung von MIME-Typen zu Erweiterungen in PHP, die ich nutzen kann?
Es ist nicht eingebaut, aber es ist nicht furchtbar schwer, etwas Eigenes zu entwickeln:
function system_extension_mime_types() {
# Returns the system MIME type mapping of extensions to MIME types, as defined in /etc/mime.types.
$out = array();
$file = fopen('/etc/mime.types', 'r');
while(($line = fgets($file)) !== false) {
$line = trim(preg_replace('/#.*/', '', $line));
if(!$line)
continue;
$parts = preg_split('/\s+/', $line);
if(count($parts) == 1)
continue;
$type = array_shift($parts);
foreach($parts as $part)
$out[$part] = $type;
}
fclose($file);
return $out;
}
function system_extension_mime_type($file) {
# Returns the system MIME type (as defined in /etc/mime.types) for the filename specified.
#
# $file - the filename to examine
static $types;
if(!isset($types))
$types = system_extension_mime_types();
$ext = pathinfo($file, PATHINFO_EXTENSION);
if(!$ext)
$ext = $file;
$ext = strtolower($ext);
return isset($types[$ext]) ? $types[$ext] : null;
}
function system_mime_type_extensions() {
# Returns the system MIME type mapping of MIME types to extensions, as defined in /etc/mime.types (considering the first
# extension listed to be canonical).
$out = array();
$file = fopen('/etc/mime.types', 'r');
while(($line = fgets($file)) !== false) {
$line = trim(preg_replace('/#.*/', '', $line));
if(!$line)
continue;
$parts = preg_split('/\s+/', $line);
if(count($parts) == 1)
continue;
$type = array_shift($parts);
if(!isset($out[$type]))
$out[$type] = array_shift($parts);
}
fclose($file);
return $out;
}
function system_mime_type_extension($type) {
# Returns the canonical file extension for the MIME type specified, as defined in /etc/mime.types (considering the first
# extension listed to be canonical).
#
# $type - the MIME type
static $exts;
if(!isset($exts))
$exts = system_mime_type_extensions();
return isset($exts[$type]) ? $exts[$type] : null;
}
Ich glaube, dies ist eine alte Antwort. Jetzt sollten Sie verwenden fileinfo
php.net/handbuch/de/ref.fileinfo.php
Sie könnten verwenden mime_content_type
aber sie ist veraltet. Verwenden Sie fileinfo
stattdessen:
function getMimeType($filename) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $filename);
finfo_close($finfo);
return $mime;
}
Es ist erwähnenswert, dass der OP eigentlich nach der Zuordnung von MIME-Typen fragte zu Dateierweiterungen. Dies deckt immer noch den häufigsten Anwendungsfall ab (und wahrscheinlich den, mit dem der OP konfrontiert war), daher verdient es sicherlich zu existieren, und ich habe es mit +1 versehen, aber es ist nicht streng genommen eine Antwort auf die Frage, die als pedantisch interpretiert wurde.
Vielleicht möchten Sie diese Bibliothek verwenden: https://github.com/ralouphie/mimey
Beispiel für die Verwendung:
$mimes = new \Mimey\MimeTypes;
// Convert extension to MIME type:
$mimes->getMimeType('json'); // application/json
// Convert MIME type to extension:
$mimes->getExtension('application/json'); // json
Dies, weil die Qualität der bereitgestellten PHP-Funktionen offenbar zweifelhaft ist.
Wenn Sie mit einer begrenzten Anzahl von Bildern arbeiten und etwas sehr Einfaches benötigen, ist dies meiner Meinung nach ausreichend.
switch($info['mime'])
{
case 'image/gif' : $extension = 'gif'; break;
case 'image/png' : $extension = 'png'; break;
case 'image/jpeg' : $extension = 'jpg'; break;
default :
throw new ApplicationException('The file uploaded was not a valid image file.');
break;
}
Diese Datei verwenden: https://github.com/ralouphie/mimey/blob/develop/mime.types.php
wie dieses :
$mimes=include('mime.types.php');
oder Inhalte kopieren:
$mime= array (
'mimes' =>
array (
'ez' =>
array (
0 => 'application/andrew-inset',
),
'aw' =>
array (
0 => 'application/applixware',
),
'atom' =>
array (
0 => 'application/atom+xml',
),
'atomcat' =>
array (
0 => 'application/atomcat+xml',
)
...
und ein Beispiel für den Abruf aus einem Stream:
$finfo = new \finfo(FILEINFO_MIME_TYPE);
$mime=$finfo->buffer($data);
$mimes=include(__DIR__."/mime.types.php");
echo ($mime); //mime
echo ($mimes['extensions'][$mime]); // file extension
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Menschen, die lediglich eine Karte erstellen wollen Erweiterungen a MIME-Typen und nicht umgekehrt, sollten beachten, dass es jetzt eine eingebaute Unterstützung dafür gibt, die sie sich zunutze machen sollten - siehe Jorges Antwort und nicht die akzeptierte.
1 Stimmen
@MarkAmery Wie bereits erwähnt, setzt finfo_file() jedoch voraus, dass die Datei existiert. Das ist nicht immer der Fall. Die Antwort von Chaos ist immer noch zutreffender für den OP und auch 8 Jahre später noch gültig.