Subversion Repositories personal-webbase

Rev

Rev 12 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
12 daniel-mar 1
<?php
2
 
14 daniel-mar 3
if (!defined('WBLEGAL')) die('Kann nicht ohne Personal WebBase ausgef&uuml;hrt werden.');
12 daniel-mar 4
 
5
$res = db_query("SELECT `daten`, `type`, `dateiname` FROM `".$mysql_zugangsdaten['praefix']."dateien` WHERE `id` = '".db_escape($id)."' AND `user` = '".$benutzer['id']."'");
6
 
7
if (db_num($res) == 0)
8
  die($header.'<b>Fehler</b><br><br>Der Download wurde nicht gefunden.'.$footer);
9
 
10
$row = db_fetch($res);
11
 
12
// Abgeänderte Version von http://www.php.net/manual/de/function.fread.php (Benutzerkommentar)
13
 
14
$size = strlen($row['daten']);
15
$filename = $row['dateiname'];
16
$ctype = $row['type']; //application/force-download
17
 
18
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
19
  $filename = preg_replace('/\./', '%2e', $filename, substr_count($filename, '.') - 1);
20
 
21
//if (!headers_sent()) header("Cache-Control:");
22
//if (!headers_sent()) header("Cache-Control: public");
23
if (!headers_sent()) header("Content-Type: $ctype");
24
if (!headers_sent()) header('Content-Disposition: attachment; filename="'.$filename.'"');
25
if (!headers_sent()) header("Accept-Ranges: bytes");
26
 
27
if (isset($_SERVER['HTTP_RANGE']))
28
{
29
  list($a, $range) = explode("=",$_SERVER['HTTP_RANGE']);
30
  str_replace($range, "-", $range);
31
  $size2=$size-1;
32
  $new_length=$size2-$range;
33
  if (!headers_sent()) header("HTTP/1.1 206 Partial Content");
34
  if (!headers_sent()) header("Content-Length: $new_length");
35
  if (!headers_sent()) header("Content-Range: bytes $range$size2/$size");
36
}
37
else
38
{
39
  $size2=$size-1;
40
  if (!headers_sent()) header("Content-Range: bytes 0-$size2/$size");
41
  if (!headers_sent()) header("Content-Length: ".$size);
42
}
43
 
44
$buffer = 1024*8;
45
while ($range <= $size)
46
{
47
  print(substr($row['daten'], $range, $buffer)); // binary
48
  $range += $buffer;
49
  flush();
50
  ob_flush();
51
}
52
 
53
?>