php 利用header下载

来源:互联网 发布:阿里巴巴php招聘要求 编辑:程序博客网 时间:2024/06/15 07:34

php 利用header下载

set_time_limit(0);    $root = dirname(dirname(dirname(__FILE__))).DIRECTORY_SEPARATOR.'html'.DIRECTORY_SEPARATOR;    $file_path = $root.'temp'.DIRECTORY_SEPARATOR.'example.xlsx';    $file_name = "example.xlsx";    if(!file_exists($file_path)){        echo "文件不存在";        exit();    }    header("Content-type:text/html;charset=utf-8");    //用以解决中文不能显示出来的问题    $file_name=iconv("utf-8","gb2312",$file_name);    $fp=fopen($file_path,"r");    $file_size=filesize($file_path);    //下载文件需要用到的头    Header("Content-type: application/octet-stream");     Header("Accept-Ranges: bytes");     Header("Accept-Length:".$file_size);     Header("Content-Disposition: attachment; filename=".$file_name);     $buffer=1024;    $file_count=0;    //向浏览器返回数据    while(!feof($fp) && $file_count<$file_size){        $file_con=fread($fp,$buffer);        $file_count+=$buffer;        echo $file_con;    }    fclose($fp);

header函数

header('Content-Description: File Transfer'); //描述页面返回的结果header('Content-Type: application/octet-stream'); //返回内容的类型,此处只知道是二进制流。具体返回类型可参考http://tool.oschina.net/commonsheader('Content-Disposition: attachment; filename='.basename($file));//可以让浏览器弹出下载窗口header('Content-Transfer-Encoding: binary');//内容编码方式,直接二进制,不要gzip压缩header('Expires: 0');//过期时间header('Cache-Control: must-revalidate');//缓存策略,强制页面不缓存,作用与no-cache相同,但更严格,强制意味更明显header('Pragma: public');header('Content-Length: ' . filesize($file));//文件大小,在文件超过2G的时候,filesize()返回的结果可能不正确

提示

Header("Content-type: application/octet-stream")的作用:通过这句代码客户端浏览器就能知道服务端返回的文件形式Header("Accept-Ranges: bytes")的作用:告诉客户端浏览器返回的文件大小是按照字节进行计算的Header("Accept-Length:".$file_size)的作用:告诉浏览器返回的文件大小Header("Content-Disposition: attachment; filename=".$file_name)的作用:告诉浏览器返回的文件的名称以上四个Header()是必需的fclose($fp)可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区