Загрузка файла 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);
И это ошибка, которую выдает Ларавель:
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 для загрузки файла? Должен ли я использовать другой фреймворк?
1 answers
Если вы хотите сделать это "способом ларавеля", у вас есть выбор.
Внутри Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesser
находится метод, называемый guess()
, который вызывается и вызывает ошибку, которую вы получаете.
Существует также метод register()
, который позволяет зарегистрировать новый. В соответствии с кодом:
По умолчанию установлены все средства определения типов mime, предоставляемые платформой (если доступно в текущей настройке ОС/PHP).
Вы можете зарегистрировать пользовательские догадки, позвонив в метод register() в одноэлементном экземпляре. Пользовательские догадки всегда вызываются перед любыми стандартными.
$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