Finfo_file в загруженном файле для определения типа mime

Я пытаюсь определить 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 set неправильно для этого, есть ли способ, которым я могу сделать это правильно с недавно загруженным файлом, используя $_FILE как это? или я иду по этой проблеме совершенно неправильно. Используя файл, я предварительно настроил его в другом, и установка $file="folder/file.doc" работает правильно.

Вы должны передать путь к функции 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); } ?> 

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

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

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

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

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

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

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