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

PHP文件下载

时间:2018-07-12 16:37:22      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:不能   度量   files   fclose   请求   names   相对路径   attach   mes   

一.PHP下载文件时不能用ajax下载,ajax会下载成二进制文件,可以用get与post方式

二.代码与注释,粘贴可以用

/**
* 下载文件
* filesize()函数只能读取本地文件大小,路径是绝对路径或者相对路径
* get_headers()函数能获取远程文件大小,路径是一个URL,获得是一个数组
* 传url参数(即文件地址),
* 我用的是远程的方法get_headers()
*/
public function Dowloads(){
//接收文件名参数
$url=$this->request->get(‘url‘);
//统计文件大小
$lengths=get_headers($url);
//get_headers获得的是一个数组,获得文件大小,你可以打印$length看下数据结构
$length=explode(":",$lengths[2]);
//这是去掉空格后的文件大小
$file_length=trim($length[1]);

//这两个是会下面用到的参数$file_length(文件大小),$file_name(下载后文件名称)
//$file_name你可以随便命名,也可以像下面我这样拼接
//把文件地址?后面的给去掉
$res2=explode("?",$url);
$res3=trim($res2[0]);
//把文件地址拆分
$file_names=explode("/",$res3);
//拼接下载后的文件名称
$file_name=$file_names[4]."/".$file_names[5]."/".$file_names[6]."/".$file_names[7];

//打开文件
$file = fopen ( $url, "rb" );
//告诉浏览器这是一个文件流格式的文件
Header ( "Content-type: application/octet-stream" );
//请求范围的度量单位
Header ( "Accept-Ranges: bytes" );
//Content-Length是指定包含于请求或响应中数据的字节长度,注意用我的Content-Length,不要用Accept-Length
Header ( "Content-Length: " .$file_length);
//用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
Header ( "Content-Disposition: attachment; filename=" . $file_name);

//读取文件内容并直接输出到浏览器
$contents = ‘‘;
while (!feof($file)) { //这步一定要加,不然下载有大小限制的
$contents = fread($file, $file_length);
echo $contents;//一定要把文件输出到浏览器上
}
fclose($file);
exit ();
}

PHP文件下载

标签:不能   度量   files   fclose   请求   names   相对路径   attach   mes   

原文地址:https://www.cnblogs.com/dyj--php/p/9299376.html

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