2010-11-28 52 views
1

我正在嘗試創建一個簡單的文件託管腳本。我正在學習PHP自己的過程中,因此面臨一些困難。PHP實時帶寬

想法是讓每個用戶的帳戶有自己的帶寬分配(下載)。

我不知道這是如何完成的。我做了一些搜索,但我找不到我的答案。據我所知有兩種方法可以做到這一點,

  1. 找出下載的文件大小,假設該文件應該完成,將其添加到使用的帶寬。

這樣做的問題是如果文件已被部分下載,它會提供不準確的結果。

  1. 找出傳輸的字節。

我不知道這是怎麼完成的......緩衝?

我想要做的一個很好的例子就像Rapidshare。他們有一個非常準確的方法來計算使用多少帶寬。

請啓發我一些可能的方法來做到這一點。

回答

0

對於帶寬限制資源的大小爲irelevant。你可以使用像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);