Intereting Posts
фильтр по значению в объекте массива php5.3.3 date.timezone снова директива php.ini не принимается во внимание Можно ли использовать JQuery для вставки закрывающего тега </ tr> и тэга открытия <tr> внутри динамической таблицы? Удалить дубликаты из массива Как извлечь фреймы анимированного GIF с помощью PHP Строка извлечения регулярных выражений между двумя фигурными фигурными скобками Код для анализа строки пользовательского агента? Почему я получаю сообщение «undefined», переданное в db? jquery php plupload Как проверить, является ли объект JSON пустым в PHP? Подключиться к БД с классом PHP не работает, когда пытаешься получить результаты Отправить FormData и String Data вместе через JQuery AJAX? Условное вложение HTML между блоками кода PHP? Как использовать andWhere и или Where в Доктрине? Предотвращение двойного голосования Сообщение об ошибке № 100 при использовании Facebook open graph api

Загрузка файла Laravel – расширение php_fileinfo не включено

Я использую Laravel 5.4.13 с PHP 7.1, и я перешел на общий хостинг. Я пытаюсь сделать работу сайта, но я не могу из-за недостающего расширения: php_fileinfo

Это код, где происходит сбой веб-сайта:

 $file = base_path() . "/storage/app/public/small.mp4"; return response()->download($file, "small.mp4")->deleteFileAfterSend(true); 

и это ошибка, которую дает Laravel:

 LogicException in MimeTypeGuesser.php line 135: Unable to guess the mime type as no guessers are available (Did you enable the php_fileinfo extension?) 

Я связался с веб-хостинговой компанией, и они сказали мне, что они не могут включить это расширение из-за измерений безопасности.

Какая у меня альтернатива? Есть ли другая функция Laravel / PHP для загрузки файла? Должен ли я использовать другую структуру?

Если вы хотите сделать это «laravel way», у вас есть возможность.

Внутри Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesser – это метод, называемый guess() который вызывается и является тем, что вызывает ошибку, которую вы получаете.

Существует также метод register() который позволяет вам зарегистрировать новый. Согласно коду:

По умолчанию все гаджеты типа mime, предоставляемые инфраструктурой, устанавливаются (если они доступны в текущей настройке ОС / PHP).

Вы можете зарегистрировать пользовательские догадки, вызвав метод register () для экземпляра singleton. Пользовательские догадки всегда вызываются перед любыми по умолчанию.

 $guesser = MimeTypeGuesser::getInstance(); $guesser->register(new MyCustomMimeTypeGuesser()); 

Если вы хотите изменить порядок угадываний по умолчанию, просто перерегистрируйте предпочитаемый вами вариант как обычный. Последний зарегистрированный угадатель предпочтительнее предыдущих зарегистрированных.

Повторная регистрация встроенного угадывателя также позволяет настроить его:

 $guesser = MimeTypeGuesser::getInstance(); $guesser->register(new FileinfoMimeTypeGuesser('/path/to/magic/file')); 

Вы можете посмотреть угадывания по умолчанию в папке vendor/symfony/http-foundation/File/MimeType и создать собственную версию, которая проверяет тип mime таким образом, который будет поддерживаться. Затем зарегистрируйте его.

Смотрите также:

http://api.symfony.com/3.0/Symfony/Component/HttpFoundation/File/MimeType/MimeTypeGuesser.html

https://github.com/symfony/http-foundation/blob/master/File/MimeType/MimeTypeGuesser.php#L131