- A+
所属分类:PHP
在很多时候,都觉得上传是一个很简单的工作,当你去正经去撸代码的时候,发现要考虑不少东西,如下出现的很多种可能,且如下代码在测试的时候一直没有通过,先记录下来,等到后期需要用到的时候再来研究。
上传函数
- function upload_file(array $fileInfo,string $uploadPath='./uploads',$imageFlag=true,$allowExt=array('jpeg','jpg','png','gif'),$maxSize=2097152){
- define('UPLOAD_ERRS',[
- 'upload_max_filesize' =>'超过了PHP配置文件中upload_max_filesize选项的值',
- 'form_max_size' =>'超过了表单MAX_FILE_SIZE选项的值(注:前端可以绕过)',
- 'upload_file_partial' =>'文件部分被上传',
- 'no_upload_file_select'=>'没有选择上传文件',
- 'upload_system_error' =>'系统错误',
- 'no_allow_exut' =>'非法文件类型',
- 'exceed_max_size' =>'超出允许上传的最大值',
- 'not_true_image' => '文件不是真实图片',
- 'not_http_post'=>'文件不是通过HTTP POST方式上传上来的',
- 'move_error' => '移动失败',
- ]);
- //检测是否上传是否有错误
- if ($fileInfo['error']===UPLOAD_ERR_OK){
- //检测上传文件类型
- $ext = strtolower(pathinfo($fileInfo['name'],PATHINFO_EXTENSION));
- //检测文件的扩展名是否在允许的范围内
- if (!in_array($ext,$allowExt)){
- return UPLOAD_ERRS['no_allow_exut'];
- }
- //检测文件的大小
- if ($fileInfo['size'] >$maxSize){
- return UPLOAD_ERRS['form_max_size'];
- }
- //检测是否是真是图片
- if ($imageFlag){
- if (@!getimagesize($fileInfo['tmp_name'])){
- return UPLOAD_ERRS['not_true_image'];
- }
- }
- //检测文件是否通过HTTP POST方式上传上来的
- if (!is_uploaded_file($fileInfo['tmp_name'])){
- return UPLOAD_ERRS['not_http_post'];
- }
- //检测目录是否存在,不存在则创建
- if (!is_dir($uploadPath)){
- mkdir($uploadPath,0777,true);
- }
- //生成唯一文件名,防止重名产生覆盖
- $uniName = md5(uniqid(microtime(true),true)).'.'.$ext;
- $dest =$uploadPath.DIRECTORY_SEPARATOR.$uniName;
- //移动文件
- if (@!move_uploaded_file($fileInfo['tmp_name'],$dest)){
- return UPLOAD_ERRS['move_error'];
- }
- return $dest;
- }else{
- switch ($fileInfo['error']){
- case 1:
- $mes =UPLOAD_ERRS['upload_max_filesize'];
- break;
- case 2:
- $mes =UPLOAD_ERRS['form_max_size'];
- break;
- case 3:
- $mes =UPLOAD_ERRS['upload_file_partial'];
- break;
- case 4:
- $mes =UPLOAD_ERRS['no_upload_file_select'];
- break;
- case 6:
- case 7:
- $mes =UPLOAD_ERRS['upload_system_error'];
- break;
- }
- return $mes;
- }
- }
扩展阅读: