File download with speed limit
This snippet shows you how to limit the download rate of a file download.
Author:
Jonas John
License:
Public Domain
Language:
PHP
Created:
08/05/2006
Updated:
08/05/2006
Tags:
network, http, files
// local file that should be send to the client $local_file = 'test-file.zip'; // filename that the user gets as default $download_file = 'your-download-name.zip'; // set the download rate limit (=> 20,5 kb/s) $download_rate = 20.5; if(file_exists($local_file) && is_file($local_file)) { // send headers header('Cache-control: private'); header('Content-Type: application/octet-stream'); header('Content-Length: '.filesize($local_file)); header('Content-Disposition: filename='.$download_file); // 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);} else { die('Error: The file '.$local_file.' does not exist!'); }
Feel free to leave a message:
Add a comment
- Dwayne Charrington.
http://www.dwaynecharrington.com
You need to count the time (before the print and after the flush). Afterwards subtract that amount from 1s, and THEN sleep for that new amount.
The problem with rate limiting is that it increases the time that each client connection lasts for and hence it increases the number of concurrent connections. You may find that you hit your max_clients setting and start causing timeouts for your users.
You should probably also add "or is not a regular file." to the error message.