How To Create A Download Quota.
        Posted  
        
            by snikolov
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by snikolov
        
        
        
        Published on 2010-05-13T13:57:46Z
        Indexed on 
            2010/05/13
            14:04 UTC
        
        
        Read the original article
        Hit count: 371
        
I need to create an handy file down loader which will count the amount of bytes downloaded and stop when it has exceed a preset limit. i need to mirror some files but i only have 7 gb per moth of bandwidth and i dont want to exceed the limit.
Example limits can be in bytes or number of files, each user has their own limit, as well as a limit for Download Quota itself. So if you set a limit of 2 gigabytes for Download Quota, downloads stop at 2 gigabytes, even if you have 3 users with a limit of 1 gigabyte each.
if ($range)
{
 //pass client Range header to rapidshare
// _insert($range);
 $cookie .= "\r\nRange: $range";
 $multipart = true;
 header("X-UR-RANGE-Range: $range");
}
//octet-stream + attachment => client always stores file
header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename="' .
 $fn . '"');
//always included so clients know this script supports resuming
header("Accept-Ranges: bytes");
//awful hack to pass rapidshare the premium cookie
$user_agent = ini_get("user_agent");
ini_set("user_agent", $user_agent . "\r\nCookie: enc=$cookie");
$httphandle = fopen($url, "r");
$headers = stream_get_meta_data($httphandle);
//let's check the return header of rapidshare for range / length indicators
//we'll just pass these to the client
foreach ($headers["wrapper_data"] as $header)
{
 $header = trim($header);
 if (substr(strtolower($header), 0, strlen("content-range")) ==
  "content-range")
 {
 // _insert($range);
  header($header);
  header("X-RS-RANGE-" . $header);
  $multipart = true; //content-range indicates partial download
 } elseif (substr(strtolower($header), 0, strlen("Content-Length")) ==
 "content-length")
 {
 // _insert($range);
  header($header);
  header("X-RS-CL-" . $header);
 }
}
//now show the client he has a partial download
if ($multipart) header('HTTP/1.1 206 Partial Content');
flush();
$download_rate = 100;
while (!feof($httphandle))
{
 // send the current file part to the browser
 $var_stat =  fread($httphandle, round($download_rate * 1024));
    $var12 = strlen($var_stat);
    //////////////////////////////////
    echo $var_stat;
    /////////////////////////////////
 // flush the content to the browser
 flush();
 // sleep one second
 sleep(1);
}
        © Stack Overflow or respective owner