Я использую 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