服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - PHP教程 - php支持分块与断点续传文件下载功能代码 - php上

php支持分块与断点续传文件下载功能代码 - php上

2024-10-30 11:30网络整理 PHP教程

php支持分块与断点续传文件下载功能代码 本文章要介绍了这篇文章是一篇关于php流下载,就是可以支持分块与断点续传文件下载,有需要的朋友可以看看,代码如下:$dowmFile = dirname ( __FILE__ ) . /Nokia - Always Here.mp3; //要

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 ( $fnamestrrpos ( $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  } 

延伸 · 阅读

精彩推荐