我正在尝试创建一个简单的文件托管脚本。我正在自己学习PHP,因此面临一些困难。
这个想法是让每个用户的帐户都有自己的带宽分配(用于下载)。
我不确定这是怎么做的。我做了一些搜索,但我找不到答案。据我所知,有两种方法可以做到,
问题在于,如果文件已部分下载,则会提供不准确的结果。
我不知道这是怎么做的......缓冲?
我正在尝试做的一个很好的例子就像Rapidshare。他们有一种非常准确的方法来计算使用的带宽。
请用一些可能的方法来启发我。
答案 0 :(得分:1)
这似乎是一个理智的解决方案: PHP - determine how many bytes sent over http
答案 1 :(得分:0)
对于带宽限制,资源的大小是相关的。您可以使用像Token Bucket这样的算法。我已经把所有内容都放到了一个图书馆:bandwidth-throttle/bandwidth-throttle
。棘手的部分是共享令牌桶,因为您需要每个用户的限制。:
use bandwidthThrottle\BandwidthThrottle;
use bandwidthThrottle\tokenBucket\storage\PDOStorage;
$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->setStorage(new PDOStorage($userId, $pdo)); // Set the limit per user
$throttle->throttle($out);
stream_copy_to_stream($in, $out);