本文实例讲述了PHP实现下载断点续传的方法。分享给大家供大家参考。
具体实现代码如下:
<?php /* * PHP下载断点续传 */ function dl_file_resume($file){ //检测文件是否存在 if (!is_file($file)) { die("<b>404 File not found!</b>"); } $len = filesize($file);//获取文件大小 $filename = basename($file);//获取文件名字 $file_extension = strtolower(substr(strrchr($filename,"."),1));//获取文件扩展名 //根据扩展名 指出输出浏览器格式 switch( $file_extension ) { case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "mp3": $ctype="audio/mpeg"; break; case "mpg":$ctype="video/mpeg"; break; case "avi": $ctype="video/x-msvideo"; break; default: $ctype="application/force-download"; } //Begin writing headers header("Cache-Control:"); header("Cache-Control: public"); //设置输出浏览器格式 header("Content-Type: $ctype"); if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {//如果是IE浏览器 # workaround for IE filename bug with multiple periods / multiple dots in filename # that adds square brackets to filename - eg. setup.abc.exe becomes setup[1].abc.exe $iefilename = preg_replace('/\./', '%2e', $filename, substr_count($filename, '.') - 1); header("Content-Disposition: attachment; filename=\"$iefilename\""); } else { header("Content-Disposition: attachment; filename=\"$filename\""); } header("Accept-Ranges: bytes"); $size=filesize($file); //如果有$_SERVER['HTTP_RANGE']参数 if(isset($_SERVER['HTTP_RANGE'])) { /* --------------------------- Range头域 Range头域可以请求实体的一个或者多个子范围。例如, 表示头500个字节:bytes=0-499 表示第二个500字节:bytes=500-999 表示最后500个字节:bytes=-500 表示500字节以后的范围:bytes=500- 第一个和最后一个字节:bytes=0-0,-1 同时指定几个范围:bytes=500-600,601-999 但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)。 ---------------------------*/ // 断点后再次连接 $_SERVER['HTTP_RANGE'] 的值 bytes=4390912- list($a, $range)=explode("=",$_SERVER['HTTP_RANGE']); //if yes, download missing part str_replace($range, "-", $range);//这句干什么的呢。。。。 $size2=$size-1;//文件总字节数 $new_length=$size2-$range;//获取下次下载的长度 header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length");//输入总长 header("Content-Range: bytes $range$size2/$size");//Content-Range: bytes 4908618-4988927/4988928 95%的时候 } else {//第一次连接 $size2=$size-1; header("Content-Range: bytes 0-$size2/$size"); //Content-Range: bytes 0-4988927/4988928 header("Content-Length: ".$size);//输出总长 } //打开文件 $fp=fopen("$file","rb"); //设置指针位置 fseek($fp,$range); //虚幻输出 while(!feof($fp)){ //设置文件最长执行时间 set_time_limit(0); print(fread($fp,1024*8));//输出文件 flush();//输出缓冲 ob_flush(); } fclose($fp); exit; } dl_file_resume("1.zip");//同级目录的1.zip 文件 //--------------------------------------- //不支持断点续传的文件下载。 //--------------------------------------- downFile("1.zip"); function downFile($sFilePath) { if(file_exists($sFilePath)){ $aFilePath=explode("/",str_replace("\\","/",$sFilePath),$sFilePath); $sFileName=$aFilePath[count($aFilePath)-1]; $nFileSize=filesize ($sFilePath); header ("Content-Disposition: attachment; filename=" . $sFileName); header ("Content-Length: " . $nFileSize); header ("Content-type: application/octet-stream"); readfile($sFilePath); } else { echo("文件不存在!"); } } ?>
希望本文所述对大家的PHP程序设计有所帮助。
本文向大家介绍PHP大文件及断点续传下载实现代码,包括了PHP大文件及断点续传下载实现代码的使用技巧和注意事项,需要的朋友参考一下 一般来说浏览器要同时下载几个文件,比如pdf文件,会在服务器端把几个文件压缩成一个文件。但是导致的问题就是会消耗服务器的cpu和io资源。 那有没有办法,用户点了几个文件,在客户端同时下载呢? 支持html5的浏览器是可以的,html的a标签有一个属性download
本文向大家介绍基于Ok+Rxjava实现断点续传下载,包括了基于Ok+Rxjava实现断点续传下载的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了实现断点续传下载的具体代码,供大家参考,具体内容如下 1、基于Ok+Rxjava实现断点续传下载 2、基于Ok+Rxjava+Retrofit实现断点续传下载 最近总结一下了一下之前学过以及用到过得功能,整理了一个基于Ok+Rxjava实现断点
本文向大家介绍基于断点续传下载原理的实现,包括了基于断点续传下载原理的实现的使用技巧和注意事项,需要的朋友参考一下 需求背景 动态创建的文件下载的时候希望浏览器显示下载进度 动态创建的文件希望能够分段下载 HTTP断点续传报文 要实现HTTP断点续传必须要简单了解以下几个报文。 Accept-Ranges 告诉客户端(浏览器..)服务器端支持断点续传 服务器端返回 Range 客户端告诉服务器端从
本文向大家介绍Python使用urllib2模块实现断点续传下载的方法,包括了Python使用urllib2模块实现断点续传下载的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python使用urllib2模块实现断点续传下载的方法。分享给大家供大家参考。具体分析如下: 在使用HTTP协议进行下载的时候只需要在头上设置一下Range的范围就可以进行断点续传下载,当然,首先服务器需要支
本文向大家介绍基于Ok+Rxjava+retrofit实现断点续传下载,包括了基于Ok+Rxjava+retrofit实现断点续传下载的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了实现断点续传下载的具体代码,供大家参考,具体内容如下 1、基于Ok+Rxjava实现断点续传下载 2、基于Ok+Rxjava+Retrofit实现断点续传下载 上一篇博客中介绍了基于Ok+Rxjava实现断点
本文向大家介绍php支持断点续传、分块下载的类,包括了php支持断点续传、分块下载的类的使用技巧和注意事项,需要的朋友参考一下 本文是为大家分享php支持断点续传、分块下载的类,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助。