欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

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

程序员文章站 2022-06-01 16:00:40
...

大前天吧,写了一篇文章是关于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教程:再谈在线下载之大文件下载》