首页 > 开发 > PHP > 正文

PHP实现HTTP断点续传的方法

2024-05-04 23:36:22
字体:
来源:转载
供稿:网友

这篇文章主要介绍了PHP实现HTTP断点续传的方法,实例分析了php基于http协议断点续传下载文件的实现方法,需要的朋友可以参考下

本文实例讲述了PHP实现HTTP断点续传的方法。分享给大家供大家参考。具体实现方法如下:

 

 
  1. <?php 
  2. /** 
  3. * PHP-HTTP断点续传实现 
  4. * @param string $path: 文件所在路径 
  5. * @param string $file: 文件名 
  6. * @return void 
  7. */ 
  8. function download($path,$file) { 
  9. $real = $path.'/'.$file
  10. if(!file_exists($real)) { 
  11. return false; 
  12. $size = filesize($real); 
  13. $size2 = $size-1; 
  14. $range = 0; 
  15. if(isset($_SERVER['HTTP_RANGE'])) { 
  16. header('HTTP /1.1 206 Partial Content'); 
  17. $range = str_replace('=','-',$_SERVER['HTTP_RANGE']); 
  18. $range = explode('-',$range); 
  19. $range = trim($range[1]); 
  20. header('Content-Length:'.$size); 
  21. header('Content-Range: bytes '.$range.'-'.$size2.'/'.$size); 
  22. else { 
  23. header('Content-Length:'.$size); 
  24. header('Content-Range: bytes 0-'.$size2.'/'.$size); 
  25. header('Accenpt-Ranges: bytes'); 
  26. header('application/octet-stream'); 
  27. header("Cache-control: public"); 
  28. header("Pragma: public"); 
  29. //解决在IE中下载时中文乱码问题 
  30. $ua = $_SERVER['HTTP_USER_AGENT']; 
  31. if(preg_match('/MSIE/',$ua)) { 
  32. $ie_filename = str_replace('+','%20',urlencode($file)); 
  33. header('Content-Dispositon:attachment; filename='.$ie_filename); 
  34. else { 
  35. header('Content-Dispositon:attachment; filename='.$file); 
  36. $fp = fopen($real,'rb+'); 
  37. fseek($fp,$range); 
  38. while(!feof($fp)) { 
  39. set_time_limit(0); 
  40. print(fread($fp,1024)); 
  41. flush(); 
  42. ob_flush(); 
  43. fclose($fp); 

希望本文所述对大家的php程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表