断点下载——php

来源:互联网 发布:淘宝淘口令怎么用 编辑:程序博客网 时间:2024/05/21 19:35
$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 :      if (function_exists ( 'mime_content_type' )) {        $fileSuffix = mime_content_type ( $filename );      } else {        $fileSuffix = 'application/octet-stream';      }      return $fileSuffix;      break;  }}

原创粉丝点击