当前位置: 首页 > news >正文

tp6上传文件大小超过了最大值+验证文件上传大小和格式函数

问题:

最近用tp6的文件上传方法上传文件时报文件过大错误。如下所示:

 $file = $this->request->file('file');
{
	"code": 1,
	"msg": "上传文件大小超过了最大值!",
	"data": {
		"code": 1,
		"line": 1232,
		"file": "D:\\myweb\\ytems\\vendor\\topthink\\framework\\src\\think\\Request.php",
		"message": "上传文件大小超过了最大值!"
    }
}

解决:

1、php.ini 配置

修改 upload_max_filesize = 10M 值为合适的大小

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 10M

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

2、 确认TP6框架的文件上传限制配置

TP6框架本身对文件上传有一定的限制,这个限制可以在配置文件中进行设置。你需要检查并修改以下配置文件:

  • config/filesystem.php‌:这个文件通常包含了文件上传的相关配置。你可以找到类似max_filesize的配置项,并将其设置为一个更大的值。例如:
    return [
        // ...
        'disks' => [
            'public' => [
                // ...
                'max_filesize' => '20M', // 设置为你需要的最大值
            ],
            // ...
        ],
        // ...
    ];
    

3、构建验证文件上传大小和格式的函数 

调用函数:

$file = $this->request->file('file');
//校验图片 
$checkFile = checkUploadFile($file, 2, ['jpg','jpeg','png']);
if($checkFile['code'] != 200){
    return error($checkFile['msg']);
}
/**
 * 判断上传文件是否合法   如:php文件不可上传
 *
 * @author
 * @param $file
 * @param $only_php_check  是否仅检查非php文件
 * @param $allowed_types  允许的文件类型
 * @param $allowed_extensions  允许的文件扩展名
 * @param $from_allowed_size  允许的文件大小 单位 M
 * @return  array
 */
function checkUploadFile($file,  $from_allowed_size=2, $allowed_extensions=[], $only_php_check=false) {

    $allowed_size = $from_allowed_size * 1024 * 1024;

    if (!isset($file)) {
        return false;
    }

    $check_php = true;

    //允许的文件类型(mimeType): application/vnd.ms-excel
    //不允许的类型 text/x-php
    $mime_type = strtolower($file->getMime());//text/x-php
    $extension = strtolower($file->getOriginalExtension());//php
    $file_size = $file->getSize();

    if($mime_type == 'text/x-php' || $extension == 'php'){
        $check_php = false;//上传文件为php文件
    }

    if($only_php_check){//仅判断是否为php文件的话 此时就返回结果。终止后续判断了。
        if($check_php){
            return ['code'=>200, 'msg'=>'上传成功'];
        }else{
            return ['code'=>4003, 'msg'=>'非法上传文件'];//为 php文件
        }

    }

    // 允许的MIME类型数组和扩展名数组
    if(!$allowed_extensions){
        $allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'xls'];
        $allowed_types = ['image/jpeg', 'image/png', 'image/gif', 'application/vnd.ms-excel'];
    }else{
        $allowed_types = [];
        foreach ($allowed_extensions as $k=>&$v) {
            switch($v){
                case 'jpg':
                case 'jpeg':
                    $allowed_types[$k] = 'image/jpeg';
                    break;
                case 'png':
                    $allowed_types[$k] = 'image/png';
                    break;
                case 'gif':
                    $allowed_types[$k] = 'image/gif';
                    break;
                case 'xls':
                    $allowed_types[$k] = 'application/vnd.ms-excel';
                    break;
                default:
                    $allowed_types[$k] = $v;
                    break;
            }
        }
    }

    if($file_size > $allowed_size){
        return ['code'=>4002, 'msg'=>'上传文件尺寸不可大于'.$from_allowed_size.'M'];
    }

    // 检查MIME类型和扩展名是否都在允许的列表中
    if (in_array($mime_type, $allowed_types) && in_array($extension, $allowed_extensions)) {
        return ['code'=>200, 'msg'=>'上传成功'];
    } else {
        return ['code'=>4001, 'msg'=>'上传图片格式不正确'];
    }

}

相关文章:

  • 支持向量机(SVM)在 NLP 中的使用场景
  • Redis常见问题排查
  • AI训练中的常用指令
  • ue----git局域网内部署裸仓库,别的机器进行访问
  • 电脑连接wifi成功但上不了网 电脑网络故障解决方法
  • WinMerge深度解析:开源免费的文件与文件夹比较利器
  • 【Bug经验分享】Postgresql 项目链接不上,JDBC及Datasource可以连接,Navicat也可连接
  • c#爬取数据并解析json
  • PH热榜 | 2025-02-20
  • 美国第1代哈希散列算法SHA-1
  • 【自动化脚本工具】AutoHotkey (Windows)
  • 力扣的第34题 在排序数组中查找元素的第一个和最后一个位置
  • 深入理解 MySQL 8 C++ 源码:SELECT MOD(MONTH(NOW()), 2) 的函数执行过程
  • Cross-correlation 加速算法公式推导
  • 算法从0到100之【专题一】- 双指针第一练(数组划分、数组分块)
  • mysql云上安装慢问题解决
  • nasm - BasicWindow_64
  • 关于重启Pod后,CNI网络插件问题报错
  • AI 内容检测工具全解析,助力内容创作无忧
  • 蓝桥杯备考策略
  • 日中友好议员联盟代表团访问中国人民对外友好协会
  • 国家发改委:建立实施育儿补贴制度
  • 国家发展改革委:我们对实现今年经济社会发展目标任务充满信心
  • 清华姚班,正走出一支军团
  • 第二十届中国电影华表奖揭晓!完整获奖名单来了
  • 专访|伊朗学者:美伊核谈不只是改革派立场,但伊朗不信任美国