多文件上传函数这么写是不是就可以了,有什么需要补充或者改进的
来源:2-15 文件上传函数封装
辰小七
2019-01-24 14:14:34
上传页面
<form action="dome.php" method="post" enctype="multipart/form-data"> <input type="file" name="myfile[]" multiple><br> <!-- <input type="file" name="onefile"><br> --> <input type="submit" name="sub" value="上传"> </form>
跳转页面
<?php require('func_file.php'); $filearray = $_FILES['myfile']; upload_multiple_files($filearray);
多文件上传函数部分
/** * upload_multiple_files 多文件上传 * @param array $filearray 多文件上传通过_FILES获得的数组 * @return array upload_file函数的结果 */ function upload_multiple_files(array $filearray) { foreach ($filearray['name'] as $key => $value) { $fileInfo[$key]['name']=$filearray['name'][$key]; $fileInfo[$key]['type']=$filearray['type'][$key]; $fileInfo[$key]['tmp_name']=$filearray['tmp_name'][$key]; $fileInfo[$key]['error']=$filearray['error'][$key]; $fileInfo[$key]['size']=$filearray['size'][$key]; } foreach ($fileInfo as $key => $value) { upload_file($value,['doc']); echo '<br>'; } }
文件上传部分
/** * upload_file * @param array $fileInfo 通过_FILES接收的数组 * @param array $allowExt 规定可以上传的文件名 * @param bool $imageFlag 是否检测上传文件为真实图片 * @param int $maxSize 最大上传文件大小 * @param string $uploadPath 上传文件存储位置 * @return string 错误信息|上传文件存储位置的路径 * 上传文件表单属性应添加enctype="multipart/form-data" */ function upload_file(array $fileInfo,array $allowExt=['jpg','png','jpeg','gif'],bool $imageFlag=false,int $maxSize=2097152,string $uploadPath='./uploads') { // 读取fileInfo的数据 $name = $fileInfo['name']; $type = $fileInfo['type']; $tmp_name = $fileInfo['tmp_name']; $error = $fileInfo['error']; $size = $fileInfo['size']; // 判断错误类型 if ($error!==0) { switch ($error) { case 1: $msg = UPLOAD_ERRS['UPLOAD_ERR_INI_SIZE']; break; case 2: $msg = UPLOAD_ERRS['UPLOAD_ERR_FORM_SIZE']; break; case 3: $msg = UPLOAD_ERRS['UPLOAD_ERR_PARTIAL']; break; case 4: $msg = UPLOAD_ERRS['UPLOAD_ERR_NO_FILE']; break; case 6: $msg = UPLOAD_ERRS['UPLOAD_ERR_NO_TMP_DIR']; break; case 7: $msg = UPLOAD_ERRS['UPLOAD_ERR_CANT_WRITE']; break; case 8: $msg = UPLOAD_ERRS['UPLOAD_ERR_EXTENSION']; break; } echo $msg; return false; } // 获取上传的文件的后缀,判断后缀是否符合规定 $ext = strtolower(pathinfo($name,PATHINFO_EXTENSION)); if (!in_array($ext, $allowExt)) { echo UPLOAD_ERRS['FILE_TYPE_NOT_CONFORMING']; return false; } // 判断是否为一张真实的图片,因为仅在上传图片时使用所以加一个参数,默认是不判断的 if ($imageFlag) { if (@!getimagesize($tmp_name)) { echo UPLOAD_ERRS['FILE_CORRUPTED']; return false; } } // 判断上传文件的大小是否符合规定 if ($size>$maxSize) { echo UPLOAD_ERRS['FILE_SIZE_VIOLATION']; return false; } // 判断文件是不是通过HTTP POST上传的 if (!is_uploaded_file($tmp_name)) { echo UPLOAD_ERRS['UPLOAD_FILE_VIA_HTTP_POST']; return false; } // 如果存放上传路径的文件夹不存在就创建一个 if (!is_dir($uploadPath)) { mkdir($uploadPath,0777,true); } // 生产唯一文件名 $newName = pathinfo($name)['filename']; $uniqidName = $newName.'_'.uniqid(); // 给文件名加上路径 $dest = $uploadPath.DIRECTORY_SEPARATOR.$uniqidName.'.'.$ext; // 移动临时文件到指定的存储位置 if (@!move_uploaded_file($tmp_name, $dest)) { echo UPLOAD_ERRS['FILE_NOVE_FAILED']; return false; }else{ echo "文件上传成功"; return $dest; } }
1回答
好帮手慕查理
2019-01-24
您好,多文件上传在《PHP常用技术与ThinkPHP5框架开发》阶段进行了讲解,建议同学可以先听下课程。祝学习愉快!
相似问题