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 ) ); 
-    
-   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) { 
-          
-         $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 ); 
-   } 
-    
- } 
- 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 : 
-       if (function_exists ( 'mime_content_type' )) { 
-         $fileSuffix = mime_content_type ( $filename ); 
-       } else { 
-         $fileSuffix = 'application/octet-stream'; 
-       } 
-       return $fileSuffix; 
-       break; 
-   } 
- }