php使用header方法下载文件

原创
所属分类: 后端开发 2018-08-15 597
来源:baidu.com

使用header方式下载文件,以下方法结合了网上各路教程,然后自己做了一些调整,添加了一些注释,分享给大家使用。

/** 
 * 使用header下载文件 
 * 
 * @access public 
 * @param file_path  文件路径 
 * @return null
 */  
function downloadFile($file_path){
    //判断路径是否存在
    if(!file_exists($file_path)){
        echo "文件不存在";
        return;
    }
 
    $fp = fopen ($file_path, "rb"); 	// 文件以二进制形式打开
    $ua = $_SERVER["HTTP_USER_AGENT"]; 
 
    //取得文件信息
    $file_size = filesize($file_path);
    $file_name = basename($file_path);
    $encoded_file_name = urlencode($file_name); 
    $encoded_file_name = str_replace("+", "%20", $encoded_file_name); 
 
    header('Content-Type: application/octet-stream;charset=utf-8');
    header("Accept-Ranges:bytes");
    header("Accept-Length:".$file_size);
 
    // 兼容多浏览器下载
    if (preg_match("/MSIE/", $ua)) { 
        header('Content-Disposition: attachment; filename=' . $encoded_file_name); 
    } else if (preg_match("/Firefox/", $ua)) { 
        header('Content-Disposition: attachment; filename*=utf8\'\'' . $file_name); 
    } else { 
        header('Content-Disposition: attachment; filename=' . $file_name); 
    } 
 
    // 清除缓存很重要
    ob_clean();
    flush();
    // 清除缓存很重要
 
    $buffer = 1024;
    $buffer_count = 0;
 
    while (!feof($fp) && $file_size - $buffer_count > 0) {
        $data = fread($fp, $buffer);
        $buffer_count += $buffer;
        echo $data;
    }
 
    fclose($fp);
 
    exit(); // 一定要使用exit退出,否则会导致输出excel文件无法打开
}


原创声明:本文为博主原创文章,转载请附上原文出处链接和声明。

相关推荐

更多内容>

PHP7+微信公众号主动通知事件mcrypt_module_open函数无法使用

后端开发

PHPExcel导出Excel基本操作,实现设置字体、合并单元格、加粗等功能

后端开发

PHP 数字转大写(中文)格式,规则可以自行调整

后端开发

Notice: A session had already been started - ignoring session_start()网站出现这个错误

后端开发
点这里分享到
朋友圈