下载 - 每个用户的最大连接数?

Max*_*ter 7 html php

我有一个php脚本,允许用户下载带有下载简历的大文件.

这工作正常,但我已经将php-code的downloadspeed限制为每个连接200kb/s.

因此,Mozillas Firefox下载管理器只进行一次连接,速度大约为200kb/s,但Free-Download-Manager或JDownloader进行2到4次连接,因此,则下载速度为(200Kb/s*2或4)= 400到800KB/S.

如何阻止此操作,并且每个用户只允许一个连接下载此文件?

Bab*_*aba 7

.我想你首先要禁用Content-Range..

14.16内容范围

Content-Range实体标头与部分实体主体一起发送,以指定应在整个实体主体中应用部分主体的位置.范围单位在3.12节中定义.

由于范围的原因,下载管理器可以下载2个或多个连接中的单个罚款.如果您同时禁用此单独文件download resumemultiple connections不能单个文件.他们会从一开始就对文件提出每个请求

LoadModule headers_module modules/mod_headers.so 
Header set Accept-Ranges none 
RequestHeader unset Range
Run Code Online (Sandbox Code Playgroud)

您还应该查看14.35.1 Byte Ranges

.介绍下载会话.

您可以uniqid id为每次下载生成一个并通过PHP页面提供.如果下载仍处于活动状态或在您刚存在页面之前已请求下载

$realFile = "test.pdf";
$fakeFile = uniqid("file");

$uniqid = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
if (empty($uniqid) || strlen($uniqid) < 20 || !ctype_xdigit($uniqid)) {
    die("Die! Die! Die! Stolen URL");
}
$memcache = new \Memcache();
$memcache->connect('localhost', 11211);

$runtime = (int) $memcache->get($uniqid);

if ($runtime) {
    die("Die! Die! Die! You Multiple Down loader");
} else {
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Content-Transfer-Encoding: binary");
    header("Content-disposition: attachment; filename=$fakeFile.pdf"); //
    header('Content-type: application/pdf');
    header("Content-length: " . filesize($realFile));
    readfile($realFile);
    $memcache->set($uniqid, 1);
}
Run Code Online (Sandbox Code Playgroud)

简单客户端

$url = "a.php?id=" . bin2hex(mcrypt_create_iv(30, MCRYPT_DEV_URANDOM));
printf("<a href='%s'>Download Here</a>",$url);
Run Code Online (Sandbox Code Playgroud)

它会输出类似的东西

<a href='a.php?id=aed621be9d43b0349fcc0b942e84216bf5cd34bcae9b0e33b9d913cccd6e'>Download Here</a>
Run Code Online (Sandbox Code Playgroud)

您还需要将每个id映射到特定文件...