Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 01.02.2014 10:33:38

Никита

[L4] Не определяется MIME-тип исполняемых файлов (exe)

Здравствуйте!
На сайте имеется форма для загрузки 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.

#2 01.02.2014 19:42:12

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: [L4] Не определяется MIME-тип исполняемых файлов (exe)

  1. так и не нашёл заветную строку с преобразованием MIME

в /vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeExtensionGuesser.php

Вам нужно делать проверку ’inputfile’ ⇒ ’mimes:bin’

Изменено Cheshirrski (01.02.2014 19:43:07)

Не в сети

#3 02.02.2014 00:35:29

Никита

Re: [L4] Не определяется MIME-тип исполняемых файлов (exe)

Спасибо Вам большое за ответ!
Валидатор, к сожалению, по-прежнему отказывается принимать exe. Наверное потому, что они имеют MIME-тип отличный от application/octet-stream. А вот с файлом, путь которого Вы написали, всё стало гораздо более понятным. По-идее, я просто могу дополнить список своими MIME-типами (или какой-нибудь хитрый extend сделать). Вопрос только в том, как правильно указать несколько ключей для одного значения? т.е. имеем строку:

'application/octet-stream' => 'bin'

могу ли я сделать так?

'application/octet-stream' => 'bin',
'application/x-dosexec'     => 'bin'

или значения должны быть уникальными?

#4 02.02.2014 01:01:09

Cheshirrski
masterМастер
Откуда: Днепр
Сообщений: 116
Статей: 2

Re: [L4] Не определяется MIME-тип исполняемых файлов (exe)

Сделайте собственное правило проверки, я обычно расширяю класс. Код для понимания как это работает смотрим в /vendor/laravel/framework/src/Illuminate/Validation/Validator.php

Не в сети

Подвал раздела