Как я могу получить MIME-тип в PHP - PullRequest
2 голосов
/ 12 сентября 2010

Я пишу сценарий, и мне нужно правильно (я думаю, что некоторые типы MIME могут отличаться от их расширений) получить типы файлов MIME (файлы могут быть любого типа).

Используемая веб-хостинговая компания не имеет mime_content_type() и все еще (не знаю, в каком году они ее исправят) обещает исправить альтернативу PECL.

Каким другим способом я могу пойти (и у меня нет доступа к командам оболочки)?

Ответы [ 3 ]

2 голосов
/ 17 февраля 2011

Я использую следующую функцию, которая является оберткой для 3 самых распространенных методов:

function Mime($path, $magic = null)
{
    $path = realpath($path);

    if ($path !== false)
    {
        if (function_exists('finfo_open') === true)
        {
            $finfo = finfo_open(FILEINFO_MIME_TYPE, $magic);

            if (is_resource($finfo) === true)
            {
                $result = finfo_file($finfo, $path);
            }

            finfo_close($finfo);
        }

        else if (function_exists('mime_content_type') === true)
        {
            $result = mime_content_type($path);
        }

        else if (function_exists('exif_imagetype') === true)
        {
            $result = image_type_to_mime_type(exif_imagetype($path));
        }

        return preg_replace('~^(.+);.+$~', '$1', $result);
    }

    return false;
}
2 голосов
/ 15 октября 2013

$ _ FILES ['file'] ['type'] происходит из браузера, который загружает файл, поэтому вы не можете полностью полагаться на это значение.

Извлечь finfo_file для определения типов файлов на основе содержимого файла.Расширение файла также ненадежно, так как пользователь может загрузить вредоносный код с расширением mp3.

2 голосов
/ 12 сентября 2010

Вы можете попробовать finfo_file - он возвращает тип MIME.

http://php.net/manual/en/book.fileinfo.php

...