PHP实现多文件上传

来源:互联网 发布:怎样安装windows 编辑:程序博客网 时间:2024/06/10 05:32

PHP实现多文件上传,与单文件上传绝大部分是相同的,不过还是有区分的地方,主要有三点:


一、前端页面:

可以出现多个文件浏览按钮,也可以设置文件浏览按钮可以选择多个文件。需要注意的是文件浏览按钮的名字是数组,因为要求上传多个文件。

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><h2>上传文件</h2><form action="testFiles.php" method='post' enctype="multipart/form-data"><!--<input type='file' name="myfile[]"/><br/><input type='file' name="myfile[]"/><br/><input type='file' name="myfile[]"/><br/>--><input type='file' name="myfile[]" multiple="multiple"/><br/><input type='submit' value="上传文件"/></form></body></html>


二、如果上传的是多个文件,通过$_FILES获得的数组是三维数组;如果上传的是单个文件,通过$_FILES获得的数组是二维数组,所以这都需要判断,并且为了使用通过检测的图片文件成功上传,需要重构上传文件的信息。

其中getFiles()为上传文件信息的重构函数封装;uploadFile()为上传文件的检测函数封装,具体代码如下:


<span style="font-size:14px;"><?php//构造上传文件信息function getFiles(){$i = 0;foreach($_FILES as $file){//如果上传的是单文件的话,直接把数组赋值就可以if(is_string($file['name'])){$files[$i] = $file;$i++;//循环变量自增}elseif(is_array($file['name'])){//如果上传的是多文件的话,需要从不同的数组中提取相对应的元素foreach($file['name'] as $key=>$var){$files[$i]['name'] = $file['name'][$key];$files[$i]['type'] = $file['type'][$key];$files[$i]['tmp_name'] = $file['tmp_name'][$key];$files[$i]['error'] = $file['error'][$key];$files[$i]['size'] = $file['size'][$key];$i++;//循环变量自增}}}return $files;}function uploadFile($pic_info){//判断是否上传头像if(!empty($pic_info)){//判断文件上传到临时文件是否出错if($pic_info['error'] >0){$error_msg = '上传错误:';switch($pic_info['error']){case 1: $error_msg .= '文件大小超过了php.ini中upload_max_filesize选项限制的值!'; break;case 2: $error_msg .= '文件大小超过了表单中max_file_size选项指定的值!'; break;case 3: $error_msg .= '文件只有部分被上传!'; break;case 4: $error_msg .= '没有文件被上传!'; break;case 6: $error_msg .= '找不到临时文件夹!'; break;case 7: $error_msg .= '文件写入失败!'; break;case 8: $error_msg .= '由于PHP的扩展程序中断文件上传!'; break;default: $error_msg .='未知错误!'; break; }echo $error_msg;return false;}//获取上传文件的类型,两种方法//$type = substr(strrchr($pic_info['name'],'.'),1);$type = pathinfo($pic_info['name'],PATHINFO_EXTENSION);$allow = array('jpeg','jpg','png','gif');//判断上传文件类型if(!in_array($type,$allow)){echo '图像类型不符合要求<br/>';return false;}//检测上传文件大小是否符合大小$maxSize = 2097152;   //2Mif($pic_info['size']>$maxSize){exit('上传文件过大<br/>');}//检测文件是否是通过HTTP POST方式上传的if(!is_uploaded_file($pic_info['tmp_name'])){exit('文件还是通过HTTP POST方式上传的。<br/>');}//检测上传文件是否为真实的图片类型if(!getimagesize($pic_info['tmp_name'])){exit('不是一个真实的图片类型。<br/>');}//为上传文件起唯一的名字,确保不被覆盖//$new_file = $pic_info['id'].'.jpg';$unique = md5(uniqid(microtime(true),true)).'.'.$type;//如果指定目录不存在,则创建目录$uploadPath = 'upload';if(!file_exists($uploadPath)){mkdir($uploadPath,0777,true);chmod($uploadPath,0777);}$destination = $uploadPath.'/'.$unique;//从暂存目录上传到指定目录,@屏蔽错误信息if(!@move_uploaded_file($pic_info['tmp_name'],$destination)){exit('文件上传失败<br/>');}echo '文件上传成功<br/>';return $destination;}else{echo "请选择上传图片!<br/>";}}?></span>


三、通过PHP代码实现多个文件的上传功能

<span style="font-size:14px;"><?php//print_r($_FILES);header('Content-type:text/html;charset=utf-8');include_once 'multiUpload.php';$files = getFiles();print_r($files);foreach($files as $fileInfo){$file[] = uploadFile($fileInfo);}//array_values()返回数组中所有的值并给其建立数字索引。//array_filter()对数组进行过滤,去掉空值$uploadFile = array_values(array_filter($file));print_r($uploadFile);?></span>

可以在页面上得到如下信息,可以看到上传成功文件的名称:

Array(    
    [0] => Array(
        [name] => IMG_20130930_120224.jpg            
        [type] => image/jpeg            
        [tmp_name] => D:\xampp\tmp\php4DEE.tmp            
        [error] => 0            
        [size] => 365134)    
    [1] => Array(            
        [name] => IMG_20130930_120314.jpg            
        [type] => image/jpeg            
        [tmp_name] => D:\xampp\tmp\php4DFE.tmp            
        [error] => 0            
        [size] => 383420)    
    [2] => Array(            
        [name] => IMG_20130930_120436.jpg            
        [type] => image/jpeg            
        [tmp_name] => D:\xampp\tmp\php4E3E.tmp            
        [error] => 0            
        [size] => 436443)    
    [3] => Array(            
        [name] => IMG_20130930_124607.jpg            
        [type] => image/jpeg            
        [tmp_name] => D:\xampp\tmp\php4E3F.tmp            
        [error] => 0            
        [size] => 468199)
    )
文件上传成功
文件上传成功
文件上传成功
文件上传成功
Array(    
    [0] => upload/4217e6f9a0251b2d8a59dec66cbe9810.jpg    
    [1] => upload/027b42fbff0117620e670b5710f8d45b.jpg    
    [2] => upload/d88ef934b7b6ebbc68c2e3afb79f05c2.jpg    
    [3] => upload/4048607fa33c73adb3473b21caa27aca.jpg)

0 0
原创粉丝点击