Giới hạn tốc độ download bằng php
CODE <?php
/**
* Download with limited speed class file.
*
* i-php group : <http://i-php.net/>
* Copyright (c) <2008>, <i-php.net>
* Licensed under New BSD License
* @filesource download_limited.php
* @copyright Copyright 2008, i-php group
* @author habogay@gmail.com
* @link http://i-php.net/about/
* @since php 5.0
* @version $Revision: 1 $
* @modifiedby $LastChangedBy: habogay $
* @lastmodified $Date: 2008-08-18 09:45:49 -0500 (Sat, 18 Oct 2008) $
* @license http://www.freebsd.org/copyright/freebsd-license.html New BSD Style License
*/
class DownloadLimited
{
/**
* Send the local file to client with limit download rate as user view file name
*
* @param string $localFile file to send
* @param string $userViewFileName filename client will see
* @param float $downloadRate download limit speed in kb/s (ex: 50 kb/s)
* @return no return
*/
function sendFile($localFile,$userViewFileName,$downloadRate)
{
/** check file exists
* @see file_exists
*/
if(!file_exists($localFile))
{
throw new Exception('File not found execption file :'.$localFile.' not found');
}
/** check file is file
* @see is_file
*/
if(!is_file($localFile))
{
throw new Exception($localFile.' not is a file');
}
if(!is_readable($localFile))
{
throw new Exception('file '.$localFile.' not readable ');
}
// send headers
header('Cache-control: private');
header('Content-Type: application/octet-stream');
header('Content-Length: '.filesize($localFile));
header('Content-Disposition: filename='.$userViewFileName);
// flush header content
flush();
// open file stream
$file = fopen($localFile, "r");
while(!feof($file))
{
// send the current file part to the browser
print fread($file, round($downloadRate * 1024));
// !important flush the content to the browser
flush();
// !important sleep one second
sleep(1);
}
// close file stream
fclose($file);
}
/**
* Send the string data to client with limit download rate as user view file name
*
* @param string string data to send include ascii,utf-8 character
* @param string $userViewFileName filename client will see
* @param float $downloadRate download limit speed in kb/s (ex: 50 kb/s)
* @return no return
*/
function sendString($data,$userViewFileName,$downloadRate)
{
// send headers
header('Cache-control: private');
header('Content-Type: application/octet-stream');
header('Content-Length: '.strlen($data));
header('Content-Disposition: filename='.$userViewFileName);
// flush header content
flush();
$start=0;
$sendSize=0;
while($sendSize<strlen($data))
{
$sendSize=round($downloadRate*1024);
print substr($data,$start,$sendSize);
$start=$sendSize;
// !important flush the content to the browser
flush();
// !important sleep one second
sleep(1);
}
}
}
?>
|
Thêm vào trang Google +