使用PHP制作多文件上传

来源:互联网 发布:博克软件 收入 编辑:程序博客网 时间:2024/06/10 00:42
/**
 * 将$_FILES统一为二维索引+关联数组
 * return  array
 */
function getFilesArray(){
    $i=0;
    foreach($_FILES as $file){
        if(is_string($file['name'])){
            $arr[$i]=$file;
            $i++;
        }else if(is_array($file['name'])){
            foreach($file['name'] as $k=>$v){
                $arr[$k]['name']=$file['name'][$k];
                $arr[$k]['type']=$file['type'][$k];
                $arr[$k]['tmp_name']=$file['tmp_name'][$k];
                $arr[$k]['error']=$file['error'][$k];
                $arr[$k]['size']=$file['size'][$k];
            }
        }
    }


    return $arr;
}




/**
 * 多文件上传
 * @param  string  $uploadDir  必选参数,上传文件存放的目录
 * @param  int  $maxsize  可选参数,限制上传文件大小
 * @param  array $allowType 可选参数,限制上传文件类型
 * @param  bool $isImg 可选参数,限制上传文件类型是否必须为图片
 * return  array  上传成功返回是文件名,上传失败返回的是错误信息
 */


function multiUpload($uploadDir,$maxsize=1048576,$allowType=array('jpg','jpeg','gif','png'),$isImg=false){
   // echo "<pre>";
    //为了解决用户file表单元素name值的不同引起的问题,我们应该将接收的关联数组转为索引数组
    $files=getFilesArray();
   // print_r($files);
    foreach($files as $k=>$v){
            //获取错误代码
            $error=$files[$k]['error'];
            if($error===0){
                //获取临时文件
                $tmp_name=$files[$k]['tmp_name'];
                //获取原文件名
                $name=$files[$k]['name'];
                //获取文件大小
                $size=$files[$k]['size'];


                //包含工具文件
                //如果后续的代码必须依赖被包含的文件才能执行,则建议使用require或require_once
                //如果后续的代码不需要被含文件也能继续执行,则建议使用include或include_once
                require_once "common.inc.php";


                //限制上传文件的大小
                if($size>$maxsize){
                    $res[$k]['error']='文件大小超过1M的最大限制';
                    continue;
                }
                //判断文件是否为http_post方式上传
                if(!is_uploaded_file($tmp_name)){
                    $res[$k]['error']='文件不是以http_post方式上传';
                    continue;
                }
                if($isImg){
                    //判断是否为真实的图片
                    /*echo $tmp_name;
                    print_r(getimagesize($tmp_name));
                    exit;*/
                    if(!@getimagesize($tmp_name)){
                        $res[$k]['error']='上传的文件不是一个图片';
                        continue;
                    }
                }


                //获取文件后缀名
                $ext=getFileExt($name);
                //限制上传文件的类型
                if(!in_array($ext,$allowType)){
                    $res[$k]['error']='上传文件类型不允许';
                    continue;
                }


                //生成随机唯一字符串
                $name=getUniqStr();
                //生成新的唯一文件名
                $filename=$name.'.'.$ext;


                //创建文件保存的目录
                if(!file_exists($uploadDir)){
                    mkdir($uploadDir);
                }


                //将文件从临时目录移动到指定目录
                if(move_uploaded_file($tmp_name,$uploadDir.'/'.$filename)){
                   $res[$k]['filename']=$filename;
                }
            }else{
                switch($error){
                    case 1:
                        $res[$k]['error']='上传文件字节数超过PHP配置文件upload_max_filesize所规定的字节数';
                        break;
                    case 2:
                        $res[$k]['error']='上传文件字节数超过表单隐藏域(MAX_FILE_SIZE)规定的字节数';
                        break;
                    case 3:
                        $res[$k]['error']='文件部分被上传';
                        break;
                    case 4:
                        $res[$k]['error']='没有上传文件';
                        break;
                    case 6:
                        $res[$k]['error']='没有临时目录';
                        break;
                    case 7:
                        $res[$k]['error']='临时目录没有写入权限';
                        break;
                    default:
                        $res[$k]['error']='未知错误';
                }
            }
    }
    return $res;
}
原创粉丝点击