php支持分块与断点续传文件下载功能代码本文章要介绍了这篇文章是一篇关于php流下载,就是可以支持分块与断点续传文件下载,有需要的朋友可以看看。代码如下复制代码$dowmFile=dirname(__FILE__).'/Nokia-AlwaysHere.mp3';//要下载的文件,绝对或相对$dowmName='Nokia-AlwaysHere.mp3';ob_start();getlocalfile($dowmFile,$dowmName);flush();ob_flush();functiongetlocalfile($fname,$filename=''){$fsize=filesize($fname);header('Cache-Control:public');header('Pragma:public');header('Accept-Ranges:bytes');header('Connection:close');header('Content-Type:'.MIMEType($fname));//header('Content-Type:application/octet-stream');if(isset($filename{0})){header('Content-Disposition:attachment;filename='.$filename);}if($fp=@fopen($fname,'rb')){$start=0;$end=$fsize;$isRange=isset($_SERVER['HTTP_RANGE'])&&($_SERVER['HTTP_RANGE']!='');if($isRange){preg_match('/^bytes=([0-9]*)-([0-9]*)$/i',$_SERVER['HTTP_RANGE'],$match);$start=$match[1];$end=$match[2];$isset_start=isset($start{0});$isset_end=isset($end{0});if($isset_start&&$isset_end){//分块下载if($start=$fsize||$start0||$start$end){$start=0;$end=$fsize;}elseif($end=$fsize){$end=$fsize-$start;}else{$end-=$start-1;}}elseif($isset_start&&!$isset_end){//指定位置到结束if($start=$fsize||$start0){$start=0;$end=$fsize;}else{$end=$fsize-$start;}}elseif(!$isset_start&&$isset_end){//最后n个字节$end=$end$fsize?$fsize:$end;$start=$fsize-$end;}else{$start=0;$end=$fsize;}}if($isRange){fseek($fp,$start);header('HTTP/1.1206PartialContent');header('Content-Length:'.$end);header('Content-Ranges:bytes'.$start.'-'.($end+$start-1).'/'.$fsize);}else{header('Content-Length:'.$fsize);}if(function_exists('fpassthru')&&($end+$start)==$fsize){fpassthru($fp);}else{echofread($fp,$end);}}else{header('Content-Length:'.$fsize);readfile($fname);}//@header(Content-Type:.mime_content_type($fname));}functionMIMETyp($fname){$fileSuffix=strtolower(substr($fname,strrpos($fname,'.')+1));switch($fileSuffix){case'avi':return'video/msvideo';case'wmv':return'video/x-ms-wmv';case'txt':return'text/plain';case'htm':case'html':case'php':return'text/html';case'css':return'text/css';case'js':return'application/javascript';case'json':case'xml':case'zip':case'pdf':case'rtf':case'tar':return'application/'.$fileSuffix;case'swf':return'application/x-shockwave-flash';case'flv':return'video/x-flv';case'jpe':case'jpg':return'image/jpeg';case'jpeg':case'png':case'gif':case'bmp':case'tiff':return'image/'.$fileSuffix;case'ico':return'image/vnd.microsoft.icon';case'tif':return'image/tiff';case'svg':case'svgz':return'image/svg+xml';case'rar':return'application/x-rar-compressed';case'exe':case'msi':return'application/x-msdownload';case'cab':return'application/vnd.ms-cab-compressed';case'aif':return'audio/aiff';case'mpg':case'mpe':case'mp3':return'audio/mpeg';case'mpeg':case'wav':case'aiff':return'audio/'.$fileSuffix;case'qt':case'mov':return'video/quicktime';case'psd':return'image/vnd.adobe.photoshop';case'ai':case'eps':case'ps':return'application/postscript';case'doc':case'docx':return'application/msword';case'xls':case'xlt':case'xlm':case'xld':case'xla':case'xlc':case'xlw':case'xll':return'application/vnd.ms-excel';case'ppt':case'pps':return'application/vnd.ms-powerpoint';case'odt':return'application/vnd.oasis.opendocument.text';case'ods':return'application/vnd.oasis.opendocument.spreadsheet';default:if(function_exists('mime_content_type')){$fileSuffix=mime_content_type($filename);}else{$fileSuffix='application/octet-stream';}return$fileSuffix;break;}}