Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中限制下载速度_Php_Download_Bandwidth - Fatal编程技术网

在PHP中限制下载速度

在PHP中限制下载速度,php,download,bandwidth,Php,Download,Bandwidth,我已经尝试过谷歌搜索中的一些基本功能,甚至我自己也尝试过写一个,但是我总是遇到问题。它似乎下载了内容服务器端或其他东西,然后将其推送到用户,用户已经下载了内容服务器端或其他东西。它将打开下载页面,大约需要10秒钟下载,然后将文件完整地提供给用户,这使得它看起来好像没有下载 我想知道是否有任何类被编写来限制下载速度,或者我如何解决这个问题 我现在有这个, header("Content-type: application/force-download"); header("Content-

我已经尝试过谷歌搜索中的一些基本功能,甚至我自己也尝试过写一个,但是我总是遇到问题。它似乎下载了内容服务器端或其他东西,然后将其推送到用户,用户已经下载了内容服务器端或其他东西。它将打开下载页面,大约需要10秒钟下载,然后将文件完整地提供给用户,这使得它看起来好像没有下载

我想知道是否有任何类被编写来限制下载速度,或者我如何解决这个问题

我现在有这个,

header("Content-type: application/force-download");
    header("Content-Transfer-Encoding: Binary");
    header("Content-length: ".filesize("uploads/$filename"));
    header("Content-disposition: attachment; filename=\"$origname");
    readfile("uploads/$filename");
谢谢

@set_time_limit(0); // don't abort if it takes to long
header("Content-type: application/force-download");
header("Content-Transfer-Encoding: Binary");
header("Content-length: ".filesize("uploads/".$filename));
header('Content-disposition: attachment; filename="'.$origname.'"');
$perSecond = 5; // 5 bytes per second

$file = fopen("uploads/".$filename, 'r');
while(!feof($file)) {
    echo fread($file, $perSecond);
    flush();
    sleep(1);
}
这将向用户发送一个下载速度受限的文件。它基本上是这样工作的:

  • 打开一个文件
  • 循环直到我们到达终点
  • 回显X字节
  • 将输出刷新到用户
  • 睡一会儿
这将向用户发送一个下载速度受限的文件。它基本上是这样工作的:

  • 打开一个文件
  • 循环直到我们到达终点
  • 回显X字节
  • 将输出刷新到用户
  • 睡一会儿

您可能会对我的alpha stage项目感兴趣。可能需要更多的工作,但是已经有很多有趣的东西了。我认为它还没有F/OSS许可证;如果你想让我给它一个,就给我一个

您可能会对我的alpha stage项目感兴趣。可能需要更多的工作,但是已经有很多有趣的东西了。我认为它还没有F/OSS许可证;如果你想让我给它一个,就给我一个

我想知道是否有任何类已经被编写来限制下载速度

现在有:

我想知道是否有任何类已经被编写来限制下载速度

现在有:


重复。看看这个是的,但我有一个不同的问题,重复。检查这个是的,但我有一个不同的问题,我已经添加了它当前的样子,我将如何集成它?@HarryBeaant只需用我的代码片段替换readfile,用你的文件名(当然还有perSecond)替换我代码片段中的file.txt编辑:我刚刚更新了我的回答完成了,问题是它处理下载服务器端,然后将其推送到浏览器。所以你在下载时看不到它。@HarryBeaant我认为当你的文件无法在块中处理时,这是不可能的。你可以修改代码以支持Range:header,这样你就可以在文件下载时看到它的进度。我已经添加了它当前的样子,我将如何集成此功能?@HarryBeaant只需将readfile替换为我的代码段,并将代码段中的file.txt替换为您的文件名(当然还有perSecond)编辑:我刚刚更新了我的答案,问题是它处理下载服务器端,然后将其推送到浏览器。所以你在下载时看不到它。@HarryBeaant我认为当你的文件无法分块处理时,这是不可能的。你可以修改代码以支持Range:header,这样你就可以在文件下载时看到它的进度。
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);