我正在使用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函数可以下载文件吗?我应该使用不同的框架吗?
答案 0 :(得分:3)
如果你想以“laravel方式”这样做,你可以选择。
内部Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesser
是一个名为guess()
的方法,它被调用并且会抛出您收到的错误。
还有一个register()
方法可让您注册一个新方法。根据代码:
默认情况下,安装框架提供的所有mime类型猜测器 (如果在当前的OS / 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