Subversion Repositories personal-webbase

Rev

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

  1. <?php
  2.  
  3. if (!defined('WBLEGAL')) die('Kann nicht ohne Personal WebBase ausgef&uuml;hrt werden.');
  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. ?>
  54.