Вход Регистрация
* Taltos *

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

  1. function dnlf($dnlf){
  2.  
  3. if (headers_sent()) {
  4.  
  5. die('Заголовки отправлены');
  6.  
  7. }
  8.  
  9.  
  10.  
  11. if (ini_get('zlib.output_compression')) {
  12.  
  13. ini_set('zlib.output_compression', 'Off');
  14.  
  15. }
  16.  
  17.  
  18.  
  19. if (file_exists($dnlf)){
  20.  
  21.  
  22.  
  23. $fsize = filesize($dnlf);
  24.  
  25. $path_parts = pathinfo($dnlf);
  26.  
  27. $ext = strtolower($path_parts['extension']);
  28.  
  29.  
  30.  
  31. $fd = @fopen($dnlf, 'rb');
  32.  
  33. $f1 = fileinode($dnlf);
  34.  
  35. $f2 = filemtime($dnlf);
  36.  
  37. $ftime = gmdate('r', $f2);
  38.  
  39.  
  40.  
  41. $arr_types = array(
  42.  
  43. "sis" => "application/vnd.symbian.install",
  44.  
  45. "amr" => "audio/amr",
  46.  
  47. "jad" => "text/vnd.sun.j2me.app-descriptor;charset=UTF-8",
  48.  
  49. "jar" => "application/java-archive",
  50.  
  51. "mp4" => "video/mp4",
  52.  
  53. "3gp" => "video/3gpp",
  54.  
  55. "rar" => "application/x-rar-compressed",
  56.  
  57. "doc" => "application/msword",
  58.  
  59. "exe" => "application/octet-stream",
  60.  
  61. "pdf" => "application/pdf",
  62.  
  63. "zip" => "application/zip",
  64.  
  65. "mp3" => "audio/mpeg",
  66.  
  67. "wav" => "audio/x-wav",
  68.  
  69. "bmp" => "image/bmp",
  70.  
  71. "gif" => "image/gif",
  72.  
  73. "jpg" => "image/jpeg",
  74.  
  75. "png" => "image/png",
  76.  
  77. "css" => "text/css",
  78.  
  79. "txt" => "text/plain",
  80.  
  81. "mpg" => "video/mpeg",
  82.  
  83. "avi" => "video/x-msvideo",
  84.  
  85. );
  86.  
  87.  
  88.  
  89. if (in_array($ext, $arr_types)) {
  90.  
  91. $type = $arr_types[$ext];
  92.  
  93. } else {
  94.  
  95. $type = 'application/force-download';
  96.  
  97. }
  98.  
  99.  
  100.  
  101. if (isset($_SERVER['HTTP_RANGE'])) {
  102.  
  103. $range = $_SERVER['HTTP_RANGE'];
  104.  
  105. $range = str_replace('bytes=', '', $range);
  106.  
  107. list($range, $end) = explode('-', $range);
  108.  
  109.  
  110.  
  111. if (!empty($range)) {
  112.  
  113. fseek($fd, $range);
  114.  
  115. }
  116.  
  117. } else {
  118.  
  119. $range = 0;
  120.  
  121. }
  122.  
  123.  
  124.  
  125. if ($range) {
  126.  
  127. header($_SERVER['SERVER_PROTOCOL'] . ' 206 Partial Content');
  128.  
  129. } else {
  130.  
  131. header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK');
  132.  
  133. }
  134.  
  135.  
  136.  
  137. header('Last-Modified: ' . $ftime);
  138.  
  139. header('ETag: ' . sprintf('%x-%x-%x', $f1, $fsize, $f2));
  140.  
  141. header('Accept-Ranges: bytes');
  142.  
  143. header('Pragma: public');
  144.  
  145. header('Expires: 0');
  146.  
  147. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  148.  
  149. header('Cache-Control: private', false);
  150.  
  151. header('Content-Type: ' . $type . '');
  152.  
  153. header('Content-Description: inline; File Transfer');
  154.  
  155. header('Content-Disposition: attachment; filename="' . basename($dnlf) . '";', false);
  156.  
  157. header('Content-Transfer-Encoding: binary');
  158.  
  159. header('Content-Length: ' . ($fsize - $range));
  160.  
  161.  
  162.  
  163. if ($range) {
  164.  
  165. header('Content-Range: bytes ' . $range . '-' . ($fsize - 1) . '/' . $fsize);
  166.  
  167. }
  168.  
  169.  
  170.  
  171. header('Connection: close');
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178. sleep(1);
  179.  
  180.  
  181.  
  182. $speed = 1024*8; // 8 - speed/kb
  183.  
  184. while(!feof($fd) && connection_status()==0) { // проверяем коннект, чтоб процесс не висел при дисконнекте
  185.  
  186. $buf = fread($fd, $speed); // отдаем файл порцайками , менее напрягает сервер, актуально для файлов более 1 гб
  187.  
  188. print($buf);
  189.  
  190.  
  191. #sleep(1); // if speed > 8 разкоментирование приведет к ограничению скорости
  192.  
  193. }
  194.  
  195.  
  196.  
  197. fclose($fd);
  198.  
  199.  
  200.  
  201. } else {
  202.  
  203. die('Файл не найден!');
  204.  
  205. }
  206.  
  207.  
  208.  
  209. }
» Описание: еще одна загрузка)
» Время добавления: 12 Марта 2015 в 11:16
» Посмотров: 1534
» textarea
» Рейтинг: [+0 | -0]
Комментарии [0]
Онлайн: 0
Реклама