使用PHP限制下载速度 [英] Limit download speed using PHP
问题描述
我在Google上发现了一些PHP脚本来限制文件的下载速度,但文件以10 Mbps的速度下载,或者当我设置的时候以80 kbps的速度下载文件,在5 mb之后停止下载。
可以有人告诉我哪里可以找到一个好的PHP下载速度限制脚本吗?
非常感谢你
---编辑---
这是代码:
<?php
set_time_limit(0);
//将此值更改为
$ cs_conn = mysql_connect('localhost','root','');
mysql_select_db('shareit',$ cs_conn);
//应该发送到客户端的本地文件
$ local_file = $ _GET ['file'];
//用户获取的文件名为
$ download_file = $ _GET ['file'];
//设置下载速率限制(=> 20,5 kb / s)
$ download_rate = 85;
if(file_exists($ local_file)&& is_file($ local_file)){
//发送头
头('Cache-control:private');
header('Content-Type:application / octet-stream');
header('Content-Length:'.filesize($ local_file));
header('Content-Disposition:filename ='。$ download_file);
// flush content
flush();
//打开文件流
$ file = fopen($ local_file,r);
while(!feof($ file)){
//将当前文件部分发送到浏览器
打印fread($ file,round($ download_rate * 1024)) ;
//将内容刷新到浏览器
flush();
//睡一秒
睡眠(1);
}
//关闭文件流
fclose($ file);}
else {
die('错误:文件'$ local_file 。' 不存在!');
}
if($ dl){
} else {
header('HTTP / 1.0 503 Service不可用);
die('Abort,你达到了这个文件的下载限制');
}
?>
5MB后下载停止的原因是因为它需要超过60秒,以80KB / s下载5MB。大多数限速器脚本使用 sleep()
在发送块后暂停一段时间,恢复,发送另一个块,然后再次暂停。但如果脚本运行一分钟以上,PHP将自动终止脚本。如果发生这种情况,您的下载将停止。
您可以使用 set_time_limit()
来防止脚本终止,但是一些网络主机不允许您这样做。在这种情况下,你没有运气。
I found on Google some PHP scripts to limit the download speed of a file, but the file download at 10 Mbps or if it download at 80 kbps as i set it, after 5 mb, it stops downloading.
Can some one tell me where I can found a good PHP download speed limit script please?
Thank you very much
--- Edit ---
Here is the code :
<?php
set_time_limit(0);
// change this value below
$cs_conn = mysql_connect('localhost', 'root', '');
mysql_select_db('shareit', $cs_conn);
// local file that should be send to the client
$local_file = $_GET['file'];
// filename that the user gets as default
$download_file = $_GET['file'];
// set the download rate limit (=> 20,5 kb/s)
$download_rate = 85;
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!');
}
if ($dl) {
} else {
header('HTTP/1.0 503 Service Unavailable');
die('Abort, you reached your download limit for this file.');
}
?>
The reason your download stops after 5MB is because it takes over 60 seconds to download 5MB at 80KB/s. Most of those "speed limiter" scripts use sleep()
to pause for a while after sending a chunk, resume, send another chunk, and pause again. But PHP will automatically terminate a script if it's been running for a minute or more. When that happens, your download stops.
You can use set_time_limit()
to prevent your script from being terminated, but some web hosts will not allow you to do this. In that case you're out of luck.
这篇关于使用PHP限制下载速度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!