Использование / usr / bin / file для определения типа файла? - PullRequest
2 голосов
/ 16 июня 2011

Я планирую использовать эту системную программу / usr / bin / file, чтобы определить тип содержимого загружаемого файла, а затем действовать соответствующим образом.

Это хорошая идея или есть вещи, которые я должен остерегаться?(Или использовать что-то совсем другое)

Ответы [ 3 ]

3 голосов
/ 16 июня 2011

mime_content_type и finfo_file являются предпочтительными методами для определения типа пантомимы (любой из них часто включен в большинстве дистрибутивов php). Они используют ту же базу данных magic.mime, что и внешний инструмент, поэтому я бы использовал ее как запасной вариант.

Использование внешнего инструмента также требует извлечения MIME-типа из выходных данных, так что это несколько связано с кодом:

$type = exec("/usr/bin/file -iL " .escapeshellcmd($fn). " 2>/dev/null");
if ($type = trim(strtok(substr(strrchr($type, ":"), 1), ";"))) {
    return $type;
}

Если ваш вопрос касается надежности: да, это хороший подход. Определение типа файла с помощью магических байтов достаточно надежно на всех современных серверах Linux / U * ix.

2 голосов
/ 16 июня 2011

PHP имеет расширение fileinfo , которое использует тот же механизм, но свойственно PHP.

1 голос
/ 16 июня 2011

Если вы можете использовать расширение PECL (или используете php> = 5.3), я бы рекомендовал использовать расширение Fileinfo .

Если нет, то mime_content_type() функция подойдет, но учтите, что она устарела (в пользу или fileinfo)

...