php文件上传下载

<form action="3-upload.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="300000000000000" />
    片名:<input type="text" name="name" /><p />
    请上传大片:<input type="file" name="av" /><p />
    <input type="submit" />
</form>

pHp:

<?php
    /*echo "<pre>";
    var_dump($_POST);
    echo "</pre>";*/
    
    //1.观察数组
    
    /*echo "<pre>";
    var_dump($_FILES);
    echo "</pre>";*/
    
    $file = $_FILES;
    
    //2.判断是否是post上传
    /*if(!is_uploaded_file($file['av']['tmp_name'])){
    
        exit("文件非法上传!");
        
    }*/
    
    //3.判断文件上传是否发生了错误
    if($file['av']['error']>0){
        switch($file['av']['error']){
        
            case 1:
                exit('超过php.ini当中的upload_max_filesize的值');
            case 2:
                exit('超过html表单设定的MAX_FILE_SIZE的值');
            case 3:
                exit('文件只有部分被上传');
            case 4:
                exit('文件没有被上传');
            case 6:
                exit('找不到临时文件夹');
            case 7:
                exit('写入失败!');
            default:
                exit('发生未知错误');
        
        }
    }
    
    //4.判断文件mime类型
    $mime = $file['av']['type'];
    $mimes = array('image/bmp','image/gif','image/jpeg','image/png','image/x-icon');
    if(!in_array($mime,$mimes)){
    
        exit('文件mime类型不被允许');
    
    }
    
    //5.判断上传文件的扩展名
    $name = $file['av']['name'];
    
    //获取扩展名
    //1.字符串翻转,找最后一个.,分割成数组,找数组的第一个元素,再翻转过来
    //2.直接找最后一个.的位置,通过substr截取
    //3.strrchr
    //4.pathinfo('....',PATHINFO_EXTENSION)
    $ext = pathinfo($name,PATHINFO_EXTENSION);
    
    $exts = array('gif','png','jpeg','jpg','ico','bmp');
    
    if(!in_array($ext,$exts)){
    
        exit('文件扩展名不被允许');
    
    }
    
    //6.判断文件大小
    if($file['av']['size']>8){
    
        exit('文件大小超出范围,请修改后上传');
    
    }
    
    //7.建立文件夹,生成新的文件名
    $dir = "./uploads/".date("Y/m/d");//2013/08/08
    if(!file_exists($dir)){
        mkdir($dir,0755,true);//./uploads/2013/08/08
    }
    
    $new_name = md5(time().mt_rand()).".".$ext;
    
    //8.移动缓存文件到指定目录
    if(!move_uploaded_file($file['av']['tmp_name'],$dir."/".$new_name)){
        
        exit("很遗憾!文件上传失败!");
    
    }
    
    //9.将以上有用数据保存到数组当中
    $info = array('new_name'=>$new_name,'dir'=>$dir,'size'=>$file['av']['size'],'type'=>$mime,'ext'=>$ext);
    
    echo "亲!恭喜您!上传成功啦!";
    
    
    

 

文件上传类

<?php
    
    function upload(&$info,$up="./uploads",$name='av',$mimes=array('image/gif'),$exts=array('gif'),$size=3000000){
    
        //1.观察数组
        $file = $_FILES[$name];
        
        //2.判断错误
        if($file['error']>0){
        
            switch($file['error']){
        
                case 1:
                    $info = '超过php.ini当中的upload_max_filesize的值';
                    return false;
                case 2:
                    $info = '超过html表单设定的MAX_FILE_SIZE的值';
                    return false;
                case 3:
                    $info = '文件只有部分被上传';
                    return false;
                case 4:
                    $info = '文件没有被上传';
                    return false;
                case 6:
                    $info = '找不到临时文件夹';
                    return false;
                case 7:
                    $info = '写入失败!';
                    return false;
                default:
                    $info = '发生未知错误';
                    return false;
        
            }
            
        }
    
        //3.判断是否是post上传
        if(!is_uploaded_file($file['tmp_name'])){
            $info = "文件非法上传";
            return false;
        }
    
        //4.判断mime类型
        if(!in_array($file['type'],$mimes)){
            $info = "文件mime类型不被允许";
            return false;
        }
    
        //5.判断后缀
        $ext = pathinfo($file['name'],PATHINFO_EXTENSION);
        if(!in_array($ext,$exts)){
            $info = "文件上传扩展名不被允许";
            return false;
        }
    
        //6.判断大小
        if($file['size']>$size){
            $info = "上传大小超出指定范围";
            return false;
        }
        
        //7.新建目录,新建文件名
        $dir = rtrim($up,"/")."/".date("Y/m/d");
        if(!file_exists($dir)){
            mkdir($dir,0755,true);
        }
        $new_name = md5(time().mt_rand()).".".$ext;
        
        //8.移动文件(核心代码)
        if(move_uploaded_file($file['tmp_name'],$dir."/".$new_name)){
            $info = "亲!恭喜您!上传文件成功!";
            
            //9.返回上传文件的信息
            return array('name'=>$file['name'],'new_name'=>$new_name,'dir'=>$dir,'size'=>$file['size'],'ext'=>$ext);
        }
    
    }

类的调用:

<?php
	include "./2-upload.func.php";
	
	$info = "";
	
	$arr = upload($info,'./uploads',"av",array('image/jpeg'),array('jpg'));
	
	echo $info;
	
	var_dump($arr);

 

多文件上传:

<form action="multiple_upload.php" method="post" enctype="multipart/form-data">
	<input type="hidden" name="MAX_FILE_SIZE" value="300000000000000" />
	片名:<input type="text" name="name" /><p />
	
	请上传大片:<input type="file" name="av[]" /><p />
	请上传大片:<input type="file" name="av[]" /><p />
	请上传大片:<input type="file" name="av[]" /><p />
	请上传大片:<input type="file" name="av[]" /><p />
	请上传大片:<input type="file" name="av[]" /><p />
	请上传大片:<input type="file" name="av[]" /><p />
	
	<!--请上传大片:<input type="file" name="av1" /><p />
	请上传大片:<input type="file" name="av2" /><p />
	请上传大片:<input type="file" name="av3" /><p />
	请上传大片:<input type="file" name="av4" /><p />
	请上传大片:<input type="file" name="av5" /><p />
	请上传大片:<input type="file" name="av6" /><p />-->
	
	<input type="submit" />
</form>

 

<?php
	echo "<pre>";
	
	var_dump($_FILES);
	
	echo "</pre>";
	
	//include "2-upload.func.php";
	
	/*foreach($_FILES as $key=>$val){//遍历大数组$_FILES将里面的所有的input type=file的内容处理一遍,这个只能处理av1,av2,av3,av4...这种类型的表单
	
		upload($info,"./mul_uploads",$key,array("image/jpeg","image/gif","image/png"),array('gif','jpg','png'));
		echo $info."<br />";//循环调用函数
	
	}*/
	
	foreach($_FILES['av'] as $key=>$val){//可以处理av[]这种格式的表单数据,每次大循环将name,type,tmp_name,error,size分别遍历出来
	
		foreach($val as $k=>$v){//将对应的name/type/tmp_name/error/size的所有的内容全部遍历出来存入新数组
		
			$arr["av"][$k][$key] = $v;//$arr['av'][0]['name']
			//组装对应键的数组,每次小循环将对应的键name/type...的每个上传文件的内容对应存下来
		
		}
	
	}
	
	/*$key = "name";
	$val = array();
	$k = 0;
	$v = 'dasdasdasdas.jpg';
	$arr["av"][0]["name"]='dasdasdasdas.jpg';
	$k = 1;
	$v = "dasdasdasdasd.jpg";
	$arr['av'][1]["name"] = "";*/
	
	
	echo "<pre>";
	var_dump($arr);
	echo "</pre>";
	
	/*
array(1) {
  ["av"]=>
  array(5) {
    [0]=>
    array(6) {
      ['name']=>
      string(44) "8b13632762d0f703bdd1a0f309fa513d2697c5b9.jpg"
      ['type']=>
      string(36) "51ccc01fjw1e6j1od94b8j208206o74u.jpg"
      ['tmp_name']=>
      string(26) "2457331_131727867162_2.jpg"
      ['error']=>
      string(44) "d52a2834349b033b40abf06214ce36d3d539bd62.jpg"
      ['size']=>
      string(16) "Img259247193.jpg"
    }
    [1]=>
    array(6) {
      ['name']=>
      string(44) "8b13632762d0f703bdd1a0f309fa513d2697c5b9.jpg"
      ['type']=>
      string(36) "51ccc01fjw1e6j1od94b8j208206o74u.jpg"
      ['tmp_name']=>
      string(26) "2457331_131727867162_2.jpg"
      ['error']=>
      string(44) "d52a2834349b033b40abf06214ce36d3d539bd62.jpg"
      ['size']=>
      string(16) "Img259247193.jpg"
    }
    [2]=>
    array(6) {
      ['name']=>
      string(44) "8b13632762d0f703bdd1a0f309fa513d2697c5b9.jpg"
      ['type']=>
      string(36) "51ccc01fjw1e6j1od94b8j208206o74u.jpg"
      ['tmp_name']=>
      string(26) "2457331_131727867162_2.jpg"
      ['error']=>
      string(44) "d52a2834349b033b40abf06214ce36d3d539bd62.jpg"
      ['size']=>
      string(16) "Img259247193.jpg"
    }
    [3]=>
    array(6) {
      ['name']=>
      string(44) "8b13632762d0f703bdd1a0f309fa513d2697c5b9.jpg"
      ['type']=>
      string(36) "51ccc01fjw1e6j1od94b8j208206o74u.jpg"
      ['tmp_name']=>
      string(26) "2457331_131727867162_2.jpg"
      ['error']=>
      string(44) "d52a2834349b033b40abf06214ce36d3d539bd62.jpg"
      ['size']=>
      string(16) "Img259247193.jpg"
    }
    [4]=>
    array(6) {
      ['name']=>
      string(44) "8b13632762d0f703bdd1a0f309fa513d2697c5b9.jpg"
      ['type']=>
      string(36) "51ccc01fjw1e6j1od94b8j208206o74u.jpg"
      ['tmp_name']=>
      string(26) "2457331_131727867162_2.jpg"
      ['error']=>
      string(44) "d52a2834349b033b40abf06214ce36d3d539bd62.jpg"
      ['size']=>
      string(16) "Img259247193.jpg"
    }
  }
}
	
	*/

 

读取上传文件

<?php
	//1.告诉浏览器文件的类型
	//echo $mime = mime_content_type("./mm.jpg");
	header("Content-type:image/jpeg");
	
	//2.告诉浏览器文件的大小
	header("Content-Length:".filesize("./mm.jpg"));
	
	//3.告诉浏览器以附件的形式打开文件
	//header("Content-Disposition:attachment");
	header("Content-Disposition:attachment;filename=mm.jpg");
	
	//4.打开文件
	readfile("./mm.jpg");

function getfile($dir){
		if(!is_dir($dir)){
			return false;
		}
		$d = opendir($dir);
		while(false!==($f=readdir($d))){
			if($f=="."||$f==".."){
				continue;
			}
			$file = rtrim($dir,"/")."/".$f;
			if(is_file($file)){
				echo $f."---".filetype($file)."<br />";
			}
			if(is_dir($file)){
				getfile($file);
			}
		}
	}
	getfile("./uploads");

 

posted on 2014-12-15 10:45  < Angus >  阅读(321)  评论(0编辑  收藏  举报

导航