問題:
最近用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'=>'上傳圖片格式不正確'];}}