【发布时间】:2012-04-25 10:27:30
【问题描述】:
我将使用 Web 框架在 PHP 中实现一个网站。我从来没有用 PHP 实现过网站……我学习新语言没有问题。 问题是我想知道是否可以使用 Zend、CakePHP 等框架来创建一个页面,让您以给定的速率(例如 50 KB/s)下载文件? 谢谢。
【问题讨论】:
标签: php cakephp zend-framework bandwidth-throttling
我将使用 Web 框架在 PHP 中实现一个网站。我从来没有用 PHP 实现过网站……我学习新语言没有问题。 问题是我想知道是否可以使用 Zend、CakePHP 等框架来创建一个页面,让您以给定的速率(例如 50 KB/s)下载文件? 谢谢。
【问题讨论】:
标签: php cakephp zend-framework bandwidth-throttling
您的服务器应该处理这个问题,而不是 PHP。
如果您有 Apache,请参见此处:
Lighttpd请看这里:
【讨论】:
<Location /fastdownload> 和 <Location /veryslowfreedownload>
Selective traffic shaping plugin,只需发送标头即可轻松得多。
据我所知,限制下载速度不是核心的一部分,但这很容易实现,只需扩展 MediaView 类并将 simple feature 添加到它。
【讨论】:
sleep() 人为地减慢脚本执行速度,线程占用的资源被有效锁定,我们可以服务的客户端总数将急剧减少。
在这些框架中也可以使用 PHP 做的所有事情。诀窍是在不违反框架规则(例如 MVC 模式)的情况下做到这一点。
在 CakePHP 中,绝对有可能创建一个控制器动作来输出一个包含所有需要的头文件的二进制文件。在您的控制器操作中,您可以比limit the download speed with standard php。
【讨论】:
在我看来,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 模组
对不起我的英语
【讨论】:
如果框架不提供该功能,请使用现有库,例如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);
【讨论】: