为什么要封装到函数中?
提高上传文件的代码的重用性,保证这些代码能够在不同的场景中灵活的应用
封装到函数之前,先思考哪些部分将来可能会变化、修改,将这些可能变化的部分以参数形式传递进去,这样,我们的函数更加灵活
例如,将来上传分类的图标了,文件上传域的name是cat_logo
详细代码参考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <!--?php //参数是实际参数 upload($_FILES['cat_logo']); function upload($file) { // sleep(5); //将临时文件移动到服务器的目录中 //参数1:临时的文件名 //参数2:目的地文件名 //上传成功返回true,失败返回false $destination = 'uploads/'; //1. 限制上传文件的大小 $maxsize = 200*1024; //200KB if($file['size'] > $maxsize){ echo '图片太大了,服务器撑不下'; exit; } //2. 防止文件重复 //首先生成一个唯一的随机数作为文件的名字 //参数1:前缀 //参数2:布尔值,如果true化,更具有唯一性 $filename = uniqid('tn_',true); //确定文件的后缀 //strrchr()用来获得一个字符串中最后一次出现的字符,返回从该字符之后的部分 //参数1:look needle from haystack,大海捞针 $ext = strrchr($file['name'], '.'); $new_filename = $filename.$ext; //3. 分目录存储上传的文件 //按照日期创建子目录 $sub_path = date('Ymd').'/'; //创建目录,先判断下 uploads/20170330是否存在,如果不存在则创建该目录 if(!is_dir($destination.$sub_path)){ mkdir($destination.$sub_path,0777,true); } $destination .= $sub_path.$new_filename; //4. 上传的文件类型是否支持 $allow_type = array('image/jpeg','image/jpg','image/png','image/gif'); $true_type = $file['type']; if(!in_array($true_type, $allow_type)){ echo '不支持该类型的文件'; exit; } //实例化finfo对象,用来获得一个文件的真实的类型 $finfo = new finfo(FILEINFO_MIME_TYPE); $type = $finfo -> file($file['tmp_name']); if(!in_array($type, $allow_type)){ echo '不支持该类型的文件'; exit; } if(move_uploaded_file($file['tmp_name'], $destination)){ echo '上传成功'; }else{ echo '上传失败'; } } ?--> |
发表评论