Загружаю файл и проверяю его посредством FileValidator.
Вот такие вот правила у меня описаны в модели:
Код: Выделить всё
public function rules()
{
return [
[['file'], 'file', 'extensions'=> 'xls, xlsx, csv, sxc, dbf'],
];
}
Проблема в том, что у файлов этого типа нет своего MIME Type, и он юзает MIME Type: application/zip, таков ответ фунции finfo_file(), соответственно файл проверку не проходит.
Понятно, что можно в правила добавить "checkExtensionByMimeType"=>false, но как по мне, то это дыра в безопасности.
--------------------------------------------------------------------
Нашел на php.net предлагаемое решение этой проблемы:
Код: Выделить всё
$arrayZips = array("application/zip", "application/x-zip", "application/x-zip-compressed");
$arrayExtensions = array(".pptx", ".docx", ".dotx", ".xlsx");
$file = 'path/to/file.xlsx';
$original_extension = (false === $pos = strrpos($file, '.')) ? '' : substr($file, $pos);
$finfo = new finfo(FILEINFO_MIME);
$type = $finfo->file($file);
if (in_array($type, $arrayZips) && in_array($original_extension, $arrayExtensions))
{
return $original_extension;
}
--------------------------------------------------------------------
Что бы было более гибче, можно доработать правила, типа такого:
Код: Выделить всё
public function rules()
{
return [
[['file'], 'file', 'extensions'=> 'xlsx', 'mimeTypes'=> 'application/zip'],
[['file'], 'file', 'extensions'=> 'xls, csv, sxc, dbf'],
];
}
--------------------------------------------------------------------
Что скажите?