laravel 判断文件类型,图片类型可以识别,php 文件不能识别该怎么办?

1,
rule里:png,jpg,doc 等识别ok,但 .php .sh 不能识别
‘upfile’ => [‘required’,’file’,”mimes:$allowFileType”], // txt text php sh ,但一个 php 文件不能通过规则

2,
laravel提供的extension()方法:// png jpg doc 等识别ok, 但 php sh 识别是空

return $fileType = $request->file(‘upfile’)->extension();// echo 输出是空的

3,
原生php :可以识别 php sh 等类型的文件
$fi = new \finfo(FILEINFO_MIME);
return $fi->file($upfile);// 比如php文件,可以打印出:text/x-php; charset=utf-8

该如何优雅的得到正确结果? 总不能让我用回原生php吧

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 1

$request->file('file')->getClientOriginalExtension(); 你可以使用这个方法,从原始文件名中提取扩展名,但你要知道,文件扩展名是可伪装的,该方法没有进行深层次的mime类型检查,所以它不应被视为一个安全值,需要你自行评估该行为的安全性。

刚才花了点时间查看源码,为你找到一个更友好,更具扩展性的解决办法,创建 App\Providers\MimeTypesExtendServiceProvider.php 文件:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Symfony\Component\Mime\MimeTypes;

/**
 * 扩展支持 MimeTypes
 *
 * @package App\Providers
 */
class MimeTypesExtendServiceProvider extends ServiceProvider
{
    private $mapExtend = [
        'text/x-php' => ['php', 'php3', 'php4', 'php5', 'phps'],
        'text/x-shellscript' => ['sh'],
    ];

    public function boot()
    {
        MimeTypes::setDefault(new MimeTypes($this->mapExtend));
    }
}

config/app.phpproviders注册刚才的服务App\Providers\MimeTypesExtendServiceProvider::class,搞定。

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!