Я пытаюсь определить 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']
) вместо того, чтобы иметь сервер проверить, как файл загружен?