使用PHP限制下载速度 [英] Limit download speed using PHP

查看:158
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆