PHP实时带宽

时间:2010-11-28 13:22:05

标签: php bandwidth

我正在尝试创建一个简单的文件托管脚本。我正在自己学习PHP,因此面临一些困难。

这个想法是让每个用户的帐户都有自己的带宽分配(用于下载)。

我不确定这是怎么做的。我做了一些搜索,但我找不到答案。据我所知,有两种方法可以做到,

  1. 找出下载的文件大小,假设应该完成该文件,将其添加到使用的带宽中。
  2. 问题在于,如果文件已部分下载,则会提供不准确的结果。

    1. 找出转移的字节数。
    2. 我不知道这是怎么做的......缓冲?

      我正在尝试做的一个很好的例子就像Rapidshare。他们有一种非常准确的方法来计算使用的带宽。

      请用一些可能的方法来启发我。

2 个答案:

答案 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);