Finfo_file в загруженном файле для определения типа mime - PullRequest
13 голосов
/ 27 февраля 2012

Я пытаюсь определить mime-тип загруженного файла, я хочу использовать fileinfo (), это то, что я пытался, это не работает:

$uploadedfile = $_FILES['soup']['tmp_name'];
if(isset($uploadedfile))
{
    $uploadedname = $_FILES['soup']['name'];
    $file=$uploadedsong;
    $file.=$uploadedname;
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $file);

К сожалению, finfo_file некажется, работает, я предполагаю, что у меня неправильно установлена ​​следующая $file, есть ли способ, которым я могу сделать это правильно с недавно загруженным файлом, используя $_FILE, как это?или я иду к этой проблеме совершенно неподходящим способом.Используя файл, который я предварительно настроил в другом, и настройка $file="folder/file.doc" работает правильно.

Ответы [ 3 ]

23 голосов
/ 27 февраля 2012

Вы должны передавать путь к функции finfo_file, а не к имени файла.

<?php 
if (isset($_FILES['soup']['tmp_name'])) {
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $_FILES['soup']['tmp_name']);
    if ($mime == 'application/msword') {
        //Its a doc format do something
    }
    finfo_close($finfo);
}
?>
0 голосов
/ 04 декабря 2017

Я использую функцию finfo() buffer(), а также file_get_contents() с платформы php, как показано ниже

$finfo = new finfo(FILEINFO_MIME);
$mimetype = $finfo->buffer(file_get_contents($filename)); #gives you mime type

Вы должны быть на php 5.3 или выше и убедиться, что у вас установлено расширение finfo(). для Linux extension=fileinfo. и в окнах: php_fileinfo.dll

вы можете иметь массив принятых типов MIME, а затем проверить, существует ли он в этом массиве

$acceptedMime = [];
if(in_array($mimetype, $acceptedMime, true) === true){
  #mime type is valid. Proceed!
}

Еще одна альтернатива, позволяющая избежать проверки типов mime, - полностью сохранить загруженные файлы из корневой папки документа.

0 голосов
/ 08 января 2015

Я знаю, что это немного устарело, но, поскольку вы используете суперглобальный $_FILES, вы можете использовать ключ type массива файлов (то есть $_FILES['soup']['type']) вместо того, чтобы иметьпроверка сервера после загрузки файла?

...