2012-04-25 54 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);