Sunday, January 29, 2012

Limiting download speeds with PHP


I have this code here, however i want to limit the speed the user can download at, how would i implement this into this code;




header("Content-type: application/force-download");
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize("uploads/$filename"));
header("Content-disposition: attachment; filename=\"$origname");
readfile("uploads/$filename");



Thanks!



This is what i tried;




$download_rate = 100;



$origname = get_file_name($file[0]);




header("Content-type: application/force-download");
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize("uploads/$filename"));
header("Content-disposition: attachment; filename=\'$origname'");

$local_file = "uploads/$origname";



// flush content flush();




// open file stream
$file = fopen($local_file, "r");

while (!feof($file)) {

// send the current file part to the browser
print fread($file, round($download_rate * 1024));

// flush the content to the browser
flush();

// sleep one second
sleep(1);
}

// close file stream
fclose($file);



Why doesn't this work?

2 comments:

  1. If you've tried what @mugur suggested then there might be an issue somewhere else. For example in your snippet it seems you've got a missing escaped quotation mark:


    header("Content-disposition: attachment; filename=\"$origname");


    I guess it should be:


    header("Content-disposition: attachment; filename=\"$origname\"");

    ReplyDelete
  2. In your while fread, just calculate bytes and timestamps. Then add a tiny pause using usleep.

    ReplyDelete