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