首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php_fileinfo扩展不适用于laravel 4在线

php_fileinfo扩展不适用于laravel 4在线
EN

Stack Overflow用户
提问于 2014-08-19 21:56:53
回答 1查看 1.1K关注 0票数 1

Hi正在以文件上传字段的形式在laravel上开发应用程序。它在当地系统中运作得很好。但是当我把它上传到网上并提交表单时,它会显示出这个错误。

代码语言:javascript
复制
Unable to guess the mime type as no guessers are available 
(Did you enable the    php_fileinfo extension?)

当表单提交时,我正在检查文件上传的扩展名。

代码语言:javascript
复制
Input::file('logo')->getClientOriginalExtension();

我使用“php_fileinfo”扩展名来获取这个文件扩展名。

请告诉我该怎么做才能克服这个错误,否则还有别的办法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-02-05 03:14:20

我也有类似的情况,这就是我是如何解决这个问题的。

警告: Laravel使用php_fileinfo是因为它遵循的原则是,您不应该信任客户端--也就是说,盲目信任客户端提供的MIME类型是有风险的。

如果您愿意忽略这种风险,这里有一个简单的解决方法,特别是如果您只需要处理一次上传

实现您自己的MimeTypeGuesserInterface

这是Symfony ( Laravel构建的)用来检测文件的MIME类型的接口。这个接口的一个关键限制是只提供(临时)文件的路径来猜测它的类型。这意味着,当您到达这里时,客户端提供的MIME类型已经消失。

代码语言:javascript
复制
class StupidMimetypeGuesser implements
    Symfony\Component\HttpFoundation\File\MimeType\MimeTypeGuesserInterface
{
    protected $type = null;

    public function __construct($stupidType) {
        $this->type = $stupidType;
    }

    public function guess($path) {
        return $this->type;
    }
}

在POST处理程序中,手动提取客户端提供的MIME类型。

代码语言:javascript
复制
// This will only work for a single upload. You can implement a fancier guesser to handle multiple files
$attachment = Input::file('attachment');
$clientMime = $attachment->getClientMimeType();

MimeTypeGuesser::getInstance()->register(new StupidMimetypeGuesser($clientMime));

现在,Input::file('x')->getMimeType()将使用客户端提供的MIME类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25393629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档