首頁 >php教程 >php手册 >PHP教程:再谈在线下载之大文件下载

PHP教程:再谈在线下载之大文件下载

WBOY
WBOY原創
2016-06-06 20:10:031392瀏覽

大前天吧,写了一篇文章是关于PHP在线下载的一个实例(文章:《PHP教程:在线下载文件》),并且我提供了一个批量下载的一个方法。然后呢,第二天就有个叫做Aivier的网友从天而降,询问我如果是大文件时怎么办。我一时也想到没有考虑大文件下载的情况:正如这

大前天吧,写了一篇文章是关于PHP在线下载的一个实例(文章:《PHP教程:在线下载文件》),并且我提供了一个批量下载的一个方法。然后呢,第二天就有个叫做Aivier的网友从天而降,询问我如果是大文件时怎么办。我一时也想到没有考虑大文件下载的情况:正如这位网友所说的,大文件确实是需要分段下载哦。所以呢,我觉得有必要再来说说在线下载那些事,顺便给出这位网友一个答案哦。

函数

function?down($file_dir,$file_name){ ??
//利用函数清理多余的空格?并得到新的路径 ??
$file_dir?=?chop($file_dir); ??
//检查路径是否真心有 ??
if($file_dir?!=?''){ ??
$file_path?=?$file_dir; ??
//检查路径里面最后是否有了/ ??
if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir))!='/') ??
$file_path?.=?'/'; ??
$file_path?.=?$file_name; ??
}else{ ??
$file_path?=?$file_name; ??
}? ??
//利用完整的路径?检查文件是不是存在??? ??
if(!file_exists($file_path)){ ??
echo?'亲,没有你要找的文件呢'; ??
return?false; ??
} ??
//获取文件的大小 ??
$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); ??
//以只读状态打开文件?并获取其中的流数据 ??
$fp?=?fopen($file_path,"r"); ??
//分段大小 ??
$buffer_size?=?1024; ??
//已经传输的大小 ??
$cur_pos?=?0; ??
while(!feof($fp)&&$file_size-$cur_pos>$buffer_size){ ??
//分成段存储数据 ??
$buffer?=?fread($fp,$buffer_size); ??
echo?$buffer; ??
$cur_pos?+=?$buffer_size; ??
} ??
$buffer?=?fread($fp,$file_size-$cur_pos); ??
echo?$buffer; ??
fclose($fp); ??
return?true; ??
}??

我想,怎么批量就不用再说了吧。其实呢,这个函数也并不算复杂的,而且我自己做了一点注释,相信有基础的你可以看得出来哦。如果真心不知道怎么来个批量,那可以参考一下前面提到的那篇文章哦!!

声明: 本文采用 BY-NC-SA 协议进行授权 | IT路人
转载请注明转自《PHP教程:再谈在线下载之大文件下载》

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn