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