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