Pixel Чтобы добавлять в избранное, нужно авторизироваться

php / Download файлов

<?
function downloadFile($filename, $mimetype='application/octet-stream') {
  if (!file_exists($filename)) die('Нет файла');

  $from=$to=0; $cr=NULL;

  if (isset($_SERVER['HTTP_RANGE'])) {
    $range=substr($_SERVER['HTTP_RANGE'], strpos($_SERVER['HTTP_RANGE'], '=')+1);
    $from=strtok($range, '-');
    $to=strtok('/'); if ($to>0) $to++;
    if ($to) $to-=$from;
    header('HTTP/1.1 206 Partial Content');
    $cr='Content-Range: bytes ' . $from . '-' . (($to)?($to . '/' . $to+1):filesize($filename));
  } else  header('HTTP/1.1 200 Ok');

  $etag=md5($filename);
  $etag=substr($etag, 0, 8) . '-' . substr($etag, 8, 7) . '-' . substr($etag, 15, 8);
  header('ETag: "' . $etag . '"');

  header('Accept-Ranges: bytes');
  header('Content-Length: ' . (filesize($filename)-$to+$from));
  if ($cr) header($cr);

  header('Connection: close');
  header('Content-Type: ' . $mimetype);
  header('Last-Modified: ' . gmdate('r', filemtime($filename)));
  $f=fopen($filename, 'r');
  header('Content-Disposition: attachment; filename="' . basename($filename) . '";');
  if ($from) fseek($f, $from, SEEK_SET);
  if (!isset($to) or empty($to)) {
    $size=filesize($filename)-$from;
  } else {
    $size=$to;
  }
  $downloaded=0;
  while(!feof($f) and !connection_status() and ($downloaded<$size)) {
    echo fread($f, 512000);
    $downloaded+=512000;
    flush();
  }
  fclose($f);
}
///
$f=$_GET[f];
downloadFile($f);
?>
Реализация в одном из маленьких проектов.
2010-02-24 17:10:16

Comments

There is no comment for the moment. Add a new comment