。私はあなたのための最初のものはContent-Range
を無効にすることだと思います。..
14.16 Content-Range
のContent-レンジエンティティヘッダは、どこフルエンティティボディ内部分を指定する部分エンティティボディに送られます体を適用する必要があります。範囲単位はセクション3.12で定義されています。
ダウンロードマネージャは、あなたがこれを無効にした場合download resume
またはmultiple connections
両方が単一のファイルに作ることができません...ので、範囲の2または複数の接続では、単一の罰金をダウンロードすることができます。彼らはあなたにも14.35.1 Byte Ranges
Bを見るべき最初
例
LoadModule headers_module modules/mod_headers.so
Header set Accept-Ranges none
RequestHeader unset Range
からファイル先頭にすべての要求になるだろう。ダウンロードセッションを紹介してください。
ダウンロードごとに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);
}
単純なクライアント
$url = "a.php?id=" . bin2hex(mcrypt_create_iv(30, MCRYPT_DEV_URANDOM));
printf("<a href='%s'>Download Here</a>",$url);
ページを存在する前に、それはあなた
<a href='a.php?id=aed621be9d43b0349fcc0b942e84216bf5cd34bcae9b0e33b9d913cccd6e'>Download Here</a>
のような出力に何かを希望特定のファイルに各IDをマップする必要もあります...
最初の接続が行われたときに無効になるセッションIDを生成する方法があります。 – nkr
あなたは何とかユーザーを特定し、ダウンロードするのではなくユーザーごとに*を制限する必要があります。 – nalply
大丈夫また、セッションID、IPアドレス、mysqlデータベースなどでこれを行うことが可能なのはPHPだけです。その大丈夫ですが、私はそれが.htacessや他のものよりも可能だと思いました... –