Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте!
На сайте имеется форма для загрузки exe файлов. Через класс Validator пытаюсь проверить MIME-тип файла, дабы не допустить загрузку всякого мусора, переименованного в exe. Как я ни пытался - тщетно.
Вот что у меня в массиве правил валидации:
'inputfile' => 'mimes:exe'
Но помимо этого я пробовал вот что:
'inputfile' => 'mimes:application/octet-stream,application/x-msdownload,application/exe,application/x-exe,application/dos-exe,vms/exe,application/x-winexe,application/msdos-windows,application/x-msdos-program'
Но всё тщетно - правило не пропускает exe файлы. Пробовал в классе Validator дописать в нужном месте var_dump():
return in_array(var_dump($value->guessExtension()), $parameters);
Получил на выходе NULL. Заранее говорю - fileinfo включен и работает. Та же валидация, только для изображений (gif, jpeg и т.д.) работает как надо. Проблема именно с exe (возможно и с другими файлами, но мне не доводилось проверять).
И не совсем понятно, по какому принципу работает ExtensionGuesser? В исходниках рылся, но из за всех этих магических методов так и не нашёл заветную строку с преобразованием MIME.
Не в сети
Спасибо Вам большое за ответ!
Валидатор, к сожалению, по-прежнему отказывается принимать exe. Наверное потому, что они имеют MIME-тип отличный от application/octet-stream. А вот с файлом, путь которого Вы написали, всё стало гораздо более понятным. По-идее, я просто могу дополнить список своими MIME-типами (или какой-нибудь хитрый extend сделать). Вопрос только в том, как правильно указать несколько ключей для одного значения? т.е. имеем строку:
'application/octet-stream' => 'bin'
могу ли я сделать так?
'application/octet-stream' => 'bin',
'application/x-dosexec' => 'bin'
или значения должны быть уникальными?
Сделайте собственное правило проверки, я обычно расширяю класс. Код для понимания как это работает смотрим в /vendor/laravel/framework/src/Illuminate/Validation/Validator.php
Не в сети
Страницы 1