0

問題の詳細は次のとおりです。

1)動的な(IPベースの)ダウンロードリンクを作成したい。そのため、ユーザーは同じダウンロードリンクで異なるIPのファイルをダウンロードすることはできません。

2)実際のダウンロードを開始する前に、phpを使用してこのダウンロード要求をログに記録し、ユーザーが実際のファイルをダウンロードできるようにいくつかのチェック(httpリファラーを確認)を実行したいと思います。

3)ダウンロードファイルを再開可能にし、ダウンロードマネージャーでダウンロードできるようにしたい(複数のダウンロードインスタンスを使用)。また、ダウンロードごとに許可されるインスタンスの最大数を制限する必要があります。

4)ファイルサイズは200MBを超える可能性があります。

だから、私が考えている解決策は、ユーザーのIPのmd5ハッシュを使用してダウンロードリンクを作成することです。例: http: //yourdomain.com/download.php?ip_hash = hash-of-the-ip&file = file-to-download

これは単なる例ですが、htaccessを使用してこれの素晴らしいリンクを作成することもできます。

次に何をすべきですか?使ってみました

header("Content-Type: $ctype");
header("Content-Length: " . filesize($file));
header("Content-Disposition: attachment; filename=\"$fileName\"");
readfile($file);

ただし、これを使用しても、エンドユーザーはダウンロードを再開できません。

この方法を使用して大きなファイルを送信するのは問題ありませんか?

調査を行った結果、この方法を使用すると、エンドユーザーの.exeファイルが破損することがわかりました。

4

1 に答える 1

1

さらに調査を行った後、私は私の質問の答えを見つけました。皆さんにもシェアしたほうがいいと思いました。

ramboがコメントしたように、Apacheサーバーのmod_xsendfileモジュールを使用できます。無効になっている場合は有効にする必要があります。

apacheにこのモジュールがない場合は、モジュールファイルをダウンロードするためのリンクを次に示します。ほとんどすべてのバージョンのapacheで使用でき、x32とx64の両方で使用できます。
https://github.com/nmaier/mod_xsendfile

すべてのカスタム検証を行った後、次のコードを使用して、このapacheモジュールを使用してファイルを送信できます。

<?php
//We want to force a download box with the filename hello.txt
header('Content-Disposition: attachment;filename=hello.txt');

//File is located at data/hello.txt
header('X-Sendfile: data/hello.txt');
?>

私はそれがあなたたちを助けることを願っています:)

于 2012-06-28T10:05:02.330 に答える