Определение MIME-типа локального файла (Content-type) с помощью PHP - PullRequest
3 голосов
/ 16 марта 2010

Я пытаюсь определить тип пантомимы файла. Я пробовал несколько методов, но не нашел ничего, что давало бы стабильный результат. Я пробовал $mime = mime_content_type($file) и $mime = exec('file -bi ' . $file). Я обслуживаю изображения, CSS и JavaScript.

Пример mime_content_type() вывод:

  • jquery.min.js - текст / обычный
  • editor.js - текст / обычный
  • admin.css - текст / обычный
  • controls.css - application / x-troff
  • logo.png - текст / обычный

Пример exec(...) вывод:

  • jquery.min.js - текст / обычный текст; Charset = US-ASCII
  • editor.js - текст / x-c ++; Charset = US-ASCII
  • admin.css - текст / x-c; Charset = US-ASCII
  • controls.css - текст / x-c; Charset = US-ASCII
  • logo.png - image / png

Как видно здесь, результаты повсюду.

Моя версия PHP 5.2.6


РЕШЕНИЕ (спасибо Джейкобу)

$mimetypes = array(
    'gif' => 'image/gif',
    'png' => 'image/png',
    'jpg' => 'image/jpg',
    'css' => 'text/css',
    'js' => 'text/javascript',
);
$path_parts = pathinfo($file);
if (array_key_exists($path_parts['extension'], $mimetypes)) {
    $mime = $mimetypes[$path_parts['extension']];
} else {
    $mime = 'application/octet-stream';
}

1 Ответ

4 голосов
/ 16 марта 2010

Расширение Fileinfo выполнит работу, если вы подключены> = 5.30

  • Вам следует избегать выполнения команд
  • mime_content_type устарело в PHP 5.30

Если, к сожалению, вы находитесь на <5.30, то я, вероятно, просто написал бы это сам, это намного надежнее, чем то, что вы получаете от вышеуказанных функций / команд. </p>

Вот пример:

<?php
$filename = 'FILENAME HERE';
$mimetypes = array('png' => 'image/png', 'jpg' => 'image/jpg', 'css' => 'text/css',
    'js' => 'application/x-javascript'
    // any other extensions that you may be serving      
);

$ext = strtolower(substr($filename, strrpos($filename, '.') + 1, strlen($filename)));
if(array_key_exists($ext, $mimetypes)) {
    $mime = $mimetypes[$ext];
} else {
    echo 'mime type not found';
}

?>
...