如何在服务器上跟踪文件下载?

时间:2014-03-26 08:27:38

标签: php file download analytics tracking

我在我的服务器上放置了一个exe文件,并在网络上的数百个网站(不是我的网站)上共享该文件的链接。我在每个链接的末尾附加了不同的ID。现在我正在下载服务器上的文件。我想跟踪点击链接的网站(sit / s可以是网站上任何带有下载链接和ID的网站)以及与下载相关的其他一些统计信息。

2 个答案:

答案 0 :(得分:4)

实际上,你可以通过一些改写来简单地扭转DKasipovic的回答。例如:

RewriteEngine on
RewriteRule ^(.*).(exe|zip)$ /download.php?file=$1.$2 [R,L]

然后在download.php中:

$filename = filter_input(INPUT_GET, 'file', FILTER_SANITIZE_SPECIAL_CHARS);
$path     = $_SERVER['DOCUMENT_ROOT']."/".filename;
$referer  = $_SERVER['HTTP_REFERER'];
if ($fd = fopen ($fullPath, "r")) {

   //assume you are tracking via Google Analytics - add UA and filename

   $data = array(
    'v' => 1,
    'tid' =>'UA-XXXXXXXX-X',
    'cid' => gen_uuid(), 
    'dh' => 'example.com',
    't' => 'event', 
    'ec' => 'Download', 
    'ea' => "$filename", 
    'el' => "$referer",
    'ev' => "",
    'ni'=>1
    );

    $url = 'http://www.google-analytics.com/collect'; 
    $content = http_build_query($data);
    $content = utf8_encode($content); 
    $user_agent = 'OFFLINE TRACK'; 

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-type: application/x-www-form-urlencoded'));
    curl_setopt($ch,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
    curl_setopt($ch,CURLOPT_POST, TRUE);
    curl_setopt($ch,CURLOPT_POSTFIELDS, $content);
    curl_exec($ch);
    curl_close($ch);

    // now give them their file
    $fsize = filesize($path);
    $path_parts = pathinfo($path);
    header("Content-type: application/octet-stream");
    header("Content-Disposition: filename=".$path_parts["basename"]."");
    header("Content-length: $fsize");
    header("Cache-control: private");
    while(!feof($fd)) {
        $buffer = fread($fd, 2048);
        echo $buffer;
    }
}
fclose ($fd);
exit;

function gen_uuid() {
  return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
  mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
  mt_rand( 0, 0xffff ),
  mt_rand( 0, 0x0fff ) | 0x4000,
  mt_rand( 0, 0x3fff ) | 0x8000,
  mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
  );
}

您可以将各种数据报告回GA,请参阅https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#content

答案 1 :(得分:1)

由于您已为.exe文件提供了直接访问链接,因此您只能在跟踪下载时查看它在apache访问日志中(或您正在使用的任何Web服务器软件的访问日志)。

或者,如果您正在使用共享主机(可能是使用cPanel),您可能已经拥有了一些日志统计工具,例如awstats。

更好的方法是编写小脚本(例如download.php),它会在打开时将条目写入数据库,然后将exe文件转发给用户。这样你就可以拥有每次下载的数据库。

然后你会分享http://yoursite.com/download.php作为下载计数器。