2012-04-25 64 views
1

我將使用Web框架在PHP中實現一個網站。我從來沒有在PHP中實現過一個網站......我沒有學習新語言的問題。 問題是我想知道像Zend,CakePHP這樣的框架可以用來創建一個頁面,讓你以給定的速率下載文件(例如50 KB/s)? 謝謝。限制PHP web框架中的下載速度

回答

5

你的服務器應該處理這個問題,而不是PHP。

如果您有阿帕奇在這裏看到:

對於Lighttpd的在這裏看到:

+0

如果你提供的是需要檢查,如果用戶有某種類型的用戶級別或權限的文件,並希望根據該改變了極限,這是怎麼回事只是一個服務器端解決方案的工作? – burzum 2012-04-25 10:39:36

+1

我的猜測是:通過不同位置提供服務:''和'' – mark 2012-04-25 10:42:41

+0

是的,我認爲如此,mark可以處理您在這條路線上的權限。利用Lighttpd的TrafficShaping鏈接中的「選擇性流量整形插件」,只需發送標題就簡單多了。 – 2012-04-25 10:48:06

1

據我所知限制下載速度是不是核心的一部分,但是這是非常容易實現,只需擴展MediaView類,並添加simple feature它。

+0

這看起來很有趣,但對我來說看起來效率極低。 – F21 2012-04-25 10:38:45

+0

爲什麼會這樣效率低下? – burzum 2012-04-25 11:05:28

+0

因爲這是一個應該由網絡服務器處理的問題。當Web服務器(帶有一些修改/插件)可以以更高的效率實現時,爲什麼使用PHP來僞造「限速」並使用額外的資源?另外,如果提交者使用Apache,則爲每個PHP請求創建一個新線程。通過使用'sleep()'來人爲地減慢腳本執行速度,線程所佔用的資源就會被有效地鎖定,並且我們可以服務的客戶端總數將會大幅減少。 – F21 2012-04-25 12:20:20

0

在我看來,PHP並不是很好的限制下載的語言。我從來沒有做過,但我會做這樣

header('Content-type: image/jpeg'); 
header('Content-Disposition: attachment; filename="image.jpg"'); 
$f = file('may_image_or_file_to_download.jpg'); 

foreach($f as $line){ 
    echo $line; 
    flush(); 
    usleep(10000); //change sleep time to adjusting download speed 
} 

您更好地使用一些Apache的MODS的,如果你有機會

對不起,我的英語

0

所有你能在這些框架中也可以使用PHP。訣竅在於不違反框架規則(例如MVC模式)。

在CakePHP中,創建一個控制器動作是完全可能的,該控制器動作將一個二進制文件與所有需要的標題放在一起。在你的控制器動作中你可以比limit the download speed with standard php

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