php支持分块与断点续传文件下载功能代码
本文章要介绍了这篇文章是一篇关于php流下载,就是可以支持分块与断点续传文件下载,有需要的朋友可以看看,代码如下:
$dowmFile = dirname ( __FILE__ ) . '/Nokia - Always Here.mp3' ; //要下载的文件,绝对或相对 $dowmName = 'Nokia - Always Here.mp3' ; ob_start (); getlocalfile ( $dowmFile , $dowmName ); flush (); ob_flush (); function getlocalfile( $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 || $start < 0 || $start > $end ) { $start = 0; $end = $fsize ; } else if ( $end >= $fsize ) { $end = $fsize - $start ; } else { $end -= $start - 1; } } else if ( $isset_start && ! $isset_end ) { //指定位置到结束 if ( $start >= $fsize || $start < 0) { $start = 0; $end = $fsize ; } else { $end = $fsize - $start ; } } else if (! $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.1 206 Partial Content' ); 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 { echo fread ( $fp , $end ); } } else { header ( 'Content-Length: ' . $fsize ); readfile ( $fname ); } //@header("Content-Type: ".mime_content_type($fname)); } function MIMEType( $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 : //开源代码phpfensi.com if (function_exists ( 'mime_content_type' )) { $fileSuffix = mime_content_type ( $filename ); } else { $fileSuffix = 'application/octet-stream' ; } return $fileSuffix ; break ; } }查看更多关于php支持分块与断点续传文件下载功能代码 - php上的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did29301