2

现在有很多文件托管网站 ( 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 回答