我已经尝试过在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");
谢谢!
答案 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);
}
这将向用户发送具有限制下载速度的文件。它基本上是这样的:
答案 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);