在PHP中限制下载速度

时间:2012-02-05 20:24:59

标签: php download bandwidth

我已经尝试过在Google搜索中找到的基本版本,甚至尝试自己编写一个,但是我一直遇到问题。它似乎下载内容服务器端或其他东西,然后将其推送给已经下载的用户。它将打开下载页面并花费大约10秒钟进行下载,然后将该文件完整地提供给用户,这使得它看起来不会下载。

我想知道是否有任何类可以用来限制下载速度,或者我如何解决这个问题。

我目前有这个;

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");

谢谢!

3 个答案:

答案 0 :(得分:5)

@set_time_limit(0); // don't abort if it takes to long
header("Content-type: application/force-download");
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize("uploads/".$filename));
header('Content-disposition: attachment; filename="'.$origname.'"');
$perSecond = 5; // 5 bytes per second

$file = fopen("uploads/".$filename, 'r');
while(!feof($file)) {
    echo fread($file, $perSecond);
    flush();
    sleep(1);
}

这将向用户发送具有限制下载速度的文件。它基本上是这样的:

  • 打开文件
  • 循环直到我们结束
  • echo X bytes
  • 将输出刷新到用户
  • 睡一秒钟。

答案 1 :(得分:0)

您可能会发现我感兴趣的alpha阶段Bandwidth项目。可能需要更多的工作,但已经有很多有趣的东西。我认为它还没有F / OSS许可证;如果你想让我给它一个,请打我!

答案 2 :(得分:0)

  

我想知道是否有任何类已经写入节流下载速度

现在有:bandwidth-throttle/bandwidth-throttle

use bandwidthThrottle\BandwidthThrottle;

$in  = fopen(__DIR__ . "/resources/video.mpg", "r");
$out = fopen("php://output", "w");

$throttle = new BandwidthThrottle();
$throttle->setRate(100, BandwidthThrottle::KIBIBYTES); // Set limit to 100KiB/s
$throttle->throttle($out);

stream_copy_to_stream($in, $out);