读书人

PHP 关于文件下传上载 断点续传有关问

发布时间: 2012-12-20 09:53:21 作者: rapoo

PHP 关于文件上传下载 断点续传问题

PHP 关于文件上传下载 断点续传问题
 1 /** $file_size  文件大小 */ 2 ?function getRange($file_size){ 3     $range = isset($_SERVER['HTTP_RANGE'])?$_SERVER['HTTP_RANGE']:null; 4     if(!empty($range)){ 5         $range = preg_replace('/[\s|,].*/', '', $range); 6         $range = explode('-',substr($range,6)); 7         if (count($range) < 2 ) { 8             $range[1] = $file_size; 9         }10         $range = array_combine(array('start','end'),$range);11         if (empty($range['start'])) {12             $range['start'] = 0;13         }14         if (!isset ($range['end']) || empty($range['end'])) {15             $range['end'] = $file_size;16         }17         return $range;18     }19     return null;20 }

假设文件的地址为 $file_path

 1 $speed = 512;//此参数为下载最大速度 2 ?$pos = strrpos($file_path, "/"); 3 ?$file_name = substr($file_path, $pos+1); 4 $file_size = filesize($file_path); 5 $ranges = getRange($file_size); 6 $fh =  fopen($file_path, "rb"); 7 header('Cache-control: public'); 8 header('Content-Type: application/octet-stream'); 9 header('Content-Disposition: attachment; filename='.$file_name);10 if ($ranges != null) {11     header('HTTP/1.1 206 Partial Content');12     header('Accept-Ranges: bytes');13     header(sprintf('Content-Length: %u',$ranges['end'] - $ranges['start']));14     header(sprintf('Content-Range: bytes %s-%s/%s', $ranges['start'], $ranges['end'], $file_size));15     fseek($fh, sprintf('%u',$ranges['start']));16 }else{17     header("HTTP/1.1 200 OK");18     header(sprintf('Content-Length: %s', $file_size));19 }20 while(!feof($fh))21 {22     echo  fread($fh, round($speed*1024, 0));23     ob_flush();24     sleep(1);25 }26 ($fh != null) && fclose($fh);

基本如此 就可以解决一般性文件的断点续传或者下载了

读书人网 >PHP

热点推荐