-1

ユーザーが JavaScript プラグインを介してファイルを表示できるようにするサイトを作成しています。

これを行い、ファイルのセキュリティを維持するために、JavaScript プラグインにアクセスするたびに、元のファイルの 1 回限りの一意のコピーを作成します。

元のファイルは最大 30 MB ですが、これはシステムの複数のユーザーに対してどのように拡張されますか? 100 人がファイルのコピーを作成してアクセスするとします。

4

1 に答える 1

1

これを行うには、ユーザーに PHP スクリプトを参照するように htaccess 書き換えを作成します。

RewriteEngine On
RewriteRule ^download/([^/]+) /lib/download.php?file=$1 [QSA]

これにより、すべてのリクエストが に転送さyourdomain.com/download/anyfilehere.mp3?one_time_token=ABCDEFGれ、 がlib/download.phpに設定さ$_GET['file']れますanyfilehere.mp3。パラメーターは、one_time_token $_GET使用したように転送され[QSA]ます。

は次のdownload.phpようになります。

<?php
    if (!empty($_GET['file'])) {
        if (!empty($_GET['one_time_token'])) {
            if (TokenOK($_GET['one_time_token'])) { //Create a function called TokenOK where you look up the download token in eg. a database
                $fileName = '/var/www/downloadfolder/' . $_GET['file'];
                if (file_exists($fileName)) {
                    ExpireToken($_GET['one_time_token']); //Create a function called ExpireToken where you expire the token in eg. the database
                    readfile($fileName); //Read the file to the user
                    die();
                } else {
                    die('Error: file not found');
                }
            } else {
                die('Error: token is not OK');
            }
        } else {
            die('Error: token is not specified');
        }
    } else {
        die('Error: file is not specified');
    }
?>

考慮事項:

  • ファイルの content-type を指定する MIME ヘッダー タイプを出力します
  • 上のこの PHP マニュアル エントリをお読みください。readfile
  • ワンタイム トークンを 1 回だけダウンロードできるようにするのではなく、特定の時間枠でのみ有効になるように制限します (そして、これをユーザーに通知します)。
  • ユーザーがダウンロードをキャンセルし、再度ダウンロードできない場合、システムはどのように反応しますか?
  • ダウンロードに失敗したら?新しいダウンロード リンクを要求する必要がありますか?
  • ストリーミング MP3 ファイルの場合は、シークが機能することを確認してください (MP3 ファイルの新しい要求が作成されるため、MP3 がストリーミングされた場所の外をシークすると、シークが機能しない可能性が高くなります)。
于 2013-05-21T09:28:18.327 に答える