跟踪文件完整下载

时间:2010-02-24 21:10:26

标签: php apache2 ubuntu-server

我有一个文件托管网站,用户可以获得下载奖励。所以我想知道有没有一种方法可以跟踪访问者是否下载了整个文件,以便没有伪造的部分下载仅用于奖励。

谢谢。

2 个答案:

答案 0 :(得分:1)

我在文件托管网站上实施了类似的解决方案。

你想要做的是使用register_shutdown_function回调,它允许你检测php脚本的执行结束,无论结果如何。

然后,您希望将您的文件放在服务器上的非Web可访问位置,并让您的下载通过php:想法是您希望能够跟踪已经传递给客户端。

这是实现的基本方式(例如:)

<?php
register_shutdown_function('shutdown', $args);

$file_name = 'file.ext';
$path_to_file = '/path/to/file';
$stat = @stat($path_to_file);

//Set headers
header('Content-Type: application/octet-stream');
header('Content-Length: '.$stat['size']);
header('Connection: close');
header('Content-disposition: attachment; filename='.$file_name);

//Get pointer to file
$fp = fopen('/path/to/file', 'rb');
fpassthru($fp);

function shutdown() {
  $status = connection_status();

  //A connection status of 0 indicates no premature end of script
  if($status == 0){
    //Do whatever to increment the counter for the file.
  }
}
>?

显然有改进的方法,所以如果您需要更多细节或其他行为,请告诉我们!

答案 1 :(得分:1)

如果您可以监控Web服务器返回的HTTP响应代码并将它们绑定回生成它们的会话,那么您就可以开展业务了。

响应代码206表示系统已经提供了一些信息,但并非全部信息。当文件的最后一块熄灭时,它的响应代码不应为206。

如果您可以通过将会话代码放在URL中来将其与用户会话联系起来,那么您可以根据简单的日志聚合提供分数。