zoukankan      html  css  js  c++  java
  • 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");
    
  • 相关阅读:
    【Python进阶】用 Python 统计字数
    【Python进阶】无论API怎么变,SDK都可以根据URL实现完全动态的调用
    【机器学习_吴恩达_笔记】(一)机器学习的动机和应用
    【Python入门总结】
    【Python入门学习】列表生成和函数生成器的方式实现杨辉三角
    【Python入门学习】闭包&装饰器&开放封闭原则
    【Pthon入门学习】利用slice实现str的strip函数,类似C#中的string.trim
    【Pthon入门学习】99乘法表
    【Pthon入门学习】多级菜单小例子
    要素图层范围查询属性arcgis api for js(featuretable根据上篇的优化)原创
  • 原文地址:https://www.cnblogs.com/itcx/p/4164333.html
Copyright © 2011-2022 走看看