Intereting Posts
Использование регулярного выражения для фильтрации атрибутов в xpath с php не удалось открыть поток: Ошибка таймаута соединения – Themoviedb Отправка POST с помощью cURL – Пустой массив Получить все вложенные фигурные скобки используя 'printf' для возврата строки, а не для печати PHP CURL: использование API @filename для загрузки файлов устарело Является ли порядок результирующего массива document.querySelectorAll («input [type = checkbox») гарантирован? Отправка файлов с помощью функции Apache и PHP virtual () с поддержкой HTTP_RANGE Как я могу конкатенировать значение внутри функции в jquery в этой ситуации? Mysql бросает ошибку запроса, но заканчивая запрос просто отлично? Анализ данных JSON с помощью PHP CkEditor, Как добавить дополнительный пункт меню в правом клике? Какие другие языки позволяют программистам использовать интерфейсы в качестве функциональных параметров? получить процент сходства двух массивов в php Вызов статического метода нестатически

Определение типа Mime локального файла (Content-type) с помощью PHP

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

Пример mime_content_type() :

  • jquery.min.js – text / plain
  • editor.js – text / plain
  • admin.css – text / plain
  • controls.css – application / x-troff
  • logo.png – text / plain

Пример exec(...) output:

  • jquery.min.js – text / plain; Charset = US-ASCII
  • editor.js – text / x-c ++; Charset = US-ASCII
  • admin.css – text / xc; Charset = US-ASCII
  • controls.css – text / xc; 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'; } 

Расширение Fileinfo выполнит задание, если вы находитесь на> = 5.30

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

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

Вот пример:

 <?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'; } ?>