2

今日では、ファイルをホストする Web サイト ( ) が多数ありuploading websites、たとえば、特定のファイルの完全なダウンロードごとにポイントがカウントされます。

私の質問 は、彼らが使用しているアイデアが何であるかを理解したいです!

ファイルの完全なダウンロードだけをどのようにカウントしますか?! つまり、ファイルのダウンロードを開始した後にキャンセルした場合、ポイントはカウントされません! どうやって知ったの!特定の正確なファイルのダウンロードをキャンセルしたかどうかを知ることができるphp関数はありますか?

その質問はずっと私の頭の中にあり、それについて考えていましたが、それがどのように機能するのか、その背後にあるアイデアは何なのか理解できません. 〜ありがとう

4

1 に答える 1

1

これは、他の回答をベースとして使用することで実行できます public_html ディレクトリ外のファイルへのダウンロード アクセスを許可するにはどうすればよいですか? readfile( $filename )
と置き換えreadfileWhileConnected( $filename )ます:

EOF までファイルを読み取るか、切断します。

/** Read $filename until EOF or disconnect, 
 * if disconnect then error_log() count of bytes read already 
 */
function readfileWhileConnected( $filename ) {
    // Save and set ini values:
    $user_abort = ignore_user_abort();
    ignore_user_abort(false);
    // Get file size and set bytes_sent to zero:
    $fsize = filesize($filename);
    $bytes_sent = 0;
    // Open file:
    $f = fopen($filename, 'r');
    // Read file:
    while($chunk = fread($f, 1024)) {
        // Check if connection is still open:
        if(!connection_aborted()) {
            // Send $chunk to buffer (if any), then flush() buffers:
            echo $chunk;
            flush();
            // Add $chunk length to $bytes_sent
            $bytes_sent += strlen($chunk);
        } else {
            // Close file:
            fclose($f);
            error_log("Connection closed at $bytes_sent/$fsize");
            exit();
        }
    // Close file:
    fclose($f);
    // Reset ini values:
    ignore_user_abort($user_abort);
    return $bytes_sent;
    }
}

新しい光沢のあるclass myNewSuperDownloadHandlerClass { ... }準備ができたら、ここでfiledownload.php説明されているダウンロードのみを提供することを確認するか、うまくいった場合はそれを使用します。接続ステータスのポーリングが必要なすべてのダウンロードに使用されることを確認してください.myNewSuperDownloadHandlerClass()readfileWhileConnected()

ユーザーが接続を閉じた場合にトリガーされるコールバックを簡単に追加できます。ここには2つの出口ポイントのみがあります。(頻繁になどの多くの関数を見return false; return true; return null; return false; return true;ました..)

于 2012-04-24T08:49:51.090 に答える