码迷,mamicode.com
首页 > Web开发 > 详细

PHP文件下载

时间:2016-09-01 22:56:49      阅读:293      评论:0      收藏:0      [点我收藏+]

标签:

<?php
    header("Content-Type:text/html; charset=utf-8");

    function download($file_path){
        $file_path=iconv("utf-8","gb2312",$file_path);
        
        if(!is_file($file_path)){
            die ("<b>file not found!</b>");
        }
        
        if(!file_exists($file_path)){
            die("<b>file not found!</b>");
        }
        
        $dir_name = dirname($file_path);
        $file_name = basename($file_path);
        $len = filesize($file_path);
        $file_extension = strtolower(substr(strrchr($file_name,"."),1));//文件后缀
                
        //根据文件后缀判断content-type
        switch ($file_extension)
        {
            case "pdf" :
                $ctype = "application/pdf";
                break;
            case "exe" :
                $ctype = "application/octet-stream";
                break;
            case "zip" :
                $ctype = "application/zip";
                break;
            case "doc" :
                $ctype = "application/msword";
                break;
            case "xls" :
                $ctype = "application/vnd.ms-excel";
                break;
            case "ppt" :
                $ctype = "application/vnd.ms-powerpoint";
                break;
            case "gif" :
                $ctype = "image/gif";
                break;
            case "png" :
                $ctype = "image/png";
                break;
            case "jpeg" :
            case "jpg" :
                $ctype = "image/jpg";
                break;
            case "mp3" :
                $ctype = "audio/mpeg";
                break;
            case "wav" :
                $ctype = "audio/x-wav";
                break;
            case "mpeg" :
            case "mpg" :
            case "mpe" :
                $ctype = "video/mpeg";
                break;
            case "mov" :
                $ctype = "video/quicktime";
                break;
            case "avi" :
                $ctype = "video/x-msvideo";
                break;
            
            // The following are for extensions that shouldn‘t be downloaded
            // (sensitive stuff, like php files)
            case "php" :
            case "htm" :
            case "html" :
            case "txt" :
                die ( "<b>Cannot download " . $file_extension . " files!</b>" );
                break;
            
            default :
                $ctype = "application/force-download";
        }
        
        //缓存控制
        header("Cache-Control: public" );
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
        header("Pragma: no-cache" );
        header("Expires: 0" ); 
        header("Content-Description: File Transfer" );
        //设置下载文件类型以及文件名
        header("Content-type: ".$ctype);
        header("Accept-Ranges: bytes");
        header("Content-Disposition: attachment; filename=".$file_name);
        header("Content-Transfer-Encoding: binary" );
        header("Content-Length: ".$len );
        
        //读取文件并写给客户端
        $resource= fopen($file_path,"rb");
        $block_size= 1024; 
        $count = 0;
        while(!feof($resource) && $count<$len){
            echo fread($resource,$block_size);
            $count+= $block_size;
        }

        fclose($resource);
    }
    
    //=============================begin process==================================
    
    $dir="D:\\";
    
    if(!is_dir($dir)){
        die("dir not right!");
    }
    
    $dir= rtrim(str_replace("\\","/",$dir),"/")."/";
    
    //接受请求参数
    if(!empty($_GET) && isset($_GET["file"])){
        $file = $_GET["file"];
    }
    
    if(isset($file)){//如果有请求参数,就下载
        download($dir.$file);
    }else{//打印出对应文件夹下面的文件(不递归,不包含文件夹)
        $dir=iconv("utf-8","gb2312",$dir);
        $files = array();
        if (is_dir($dir)) {
            if ($dh = opendir($dir)) {
                while (($file = readdir($dh)) !== false) {
                    if(is_file($dir.$file)){
                        array_push($files,$file);
                    }
                }
                closedir($dh);
            }
        }
        
        if(empty($files)){
            echo "<b>no file in directory $dir</b>";
        }else{
            foreach($files as $one){
            $one = iconv("gb2312","utf-8",$one);
            echo "<p>$one <a href=‘download.php?file=$one‘>点击下载</a></p>";
            }
        }
    }
?>
    
    
    
    

 

PHP文件下载

标签:

原文地址:http://www.cnblogs.com/mataszhang/p/5831444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!