多文件上传函数这么写是不是就可以了,有什么需要补充或者改进的
来源: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框架开发》阶段进行了讲解,建议同学可以先听下课程。祝学习愉快!
相似问题