Laravel文件下载 - 未启用php_fileinfo扩展

时间:2017-05-18 15:16:45

标签: php laravel file download

我正在使用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函数可以下载文件吗?我应该使用不同的框架吗?

1 个答案:

答案 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