Загрузчик файлов

  1. function dnlf($dnlf){
  2. if (headers_sent()) {
  3. die('Заголовки отправлены');
  4. }
  5.  
  6. if (ini_get('zlib.output_compression')) {
  7. ini_set('zlib.output_compression', 'Off');
  8. }
  9.  
  10. if (file_exists($dnlf)){
  11.  
  12. $fsize = filesize($dnlf);
  13. $path_parts = pathinfo($dnlf);
  14. $ext = strtolower($path_parts['extension']);
  15.  
  16. $fd = @fopen($dnlf, 'rb');
  17. $f1 = fileinode($dnlf);
  18. $f2 = filemtime($dnlf);
  19. $ftime = gmdate('r', $f2);
  20.  
  21. $arr_types = array(
  22. "sis" => "application/vnd.symbian.install",
  23. "amr" => "audio/amr",
  24. "jad" => "text/vnd.sun.j2me.app-descriptor;charset=UTF-8",
  25. "jar" => "application/java-archive",
  26. "mp4" => "video/mp4",
  27. "3gp" => "video/3gpp",  
  28. "rar" => "application/x-rar-compressed",
  29. "doc" => "application/msword",
  30. "exe" => "application/octet-stream",
  31. "pdf" => "application/pdf",
  32. "zip" => "application/zip",
  33. "mp3" => "audio/mpeg",
  34. "wav" => "audio/x-wav",
  35. "bmp" => "image/bmp",
  36. "gif" => "image/gif",
  37. "jpg" => "image/jpeg",
  38. "png" => "image/png",
  39. "css" => "text/css",
  40. "txt" => "text/plain",
  41. "mpg" => "video/mpeg",
  42. "avi" => "video/x-msvideo",
  43. );  
  44.  
  45. if (in_array($ext, $arr_types)) {
  46. $type = $arr_types[$ext];  
  47. } else {
  48. $type = 'application/force-download';    
  49. }
  50.  
  51. if (isset($_SERVER['HTTP_RANGE'])) {
  52. $range = $_SERVER['HTTP_RANGE'];
  53. $range = str_replace('bytes=', '', $range);
  54. list($range, $end) = explode('-', $range);
  55.  
  56. if (!empty($range)) {
  57. fseek($fd, $range);
  58. }
  59. } else {
  60. $range = 0;
  61. }
  62.  
  63. if ($range) {
  64. header($_SERVER['SERVER_PROTOCOL'] . ' 206 Partial Content');
  65. } else {
  66. header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK');
  67. }
  68.  
  69. header('Last-Modified: ' . $ftime);
  70. header('ETag: ' . sprintf('%x-%x-%x', $f1, $fsize, $f2));
  71. header('Accept-Ranges: bytes');
  72. header('Pragma: public');
  73. header('Expires: 0');
  74. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  75. header('Cache-Control: private', false);
  76. header('Content-Type: ' . $type . '');
  77. header('Content-Description: inline; File Transfer');
  78. header('Content-Disposition: attachment; filename="' . basename($dnlf) . '";', false);
  79. header('Content-Transfer-Encoding: binary');
  80. header('Content-Length: ' . ($fsize - $range));
  81.  
  82. if ($range) {
  83. header('Content-Range: bytes ' . $range . '-' . ($fsize - 1) . '/' . $fsize);
  84. }
  85.  
  86. header('Connection: close');  
  87.  
  88. ob_clean();
  89.  
  90. sleep(1);
  91.  
  92. $speed = 1024*8; // 8 - speed/kb
  93. while(!feof($fd) && connection_status()==0) { // проверяем коннект, чтоб процесс не висел при дисконнекте
  94. $buf = fread($fd, $speed); // отдаем файл порцайками , менее напрягает сервер, актуально для файлов более 1 гб
  95. print($buf);
  96. flush();
  97. #sleep(1);  // if speed > 8 разкоментирование приведет к ограничению скорости
  98. }
  99.  
  100. fclose($fd);
  101.  
  102. } else {
  103. die('Файл не найден!');
  104. }
  105.  
  106. }
три дня курил маны и гугл Гг , вот что получилось

Реклама

Мы в соцсетях

tw tg yt gt