如何跟踪文件下载

时间:2008-08-01 17:14:58

标签: php apache logging download analytics

我有一个在flash播放器中播放mp3的网站。如果用户点击“播放”,则Flash播放器会自动下载并开始播放。

是否有一种简单的方法可以跟踪特定歌曲片段(或任何二进制文件)的下载次数?


  

播放链接是否为实际链接   mp3文件或一些JavaScript代码   弹出一个玩家?

     

如果是后者,您可以轻松添加您的   在那里拥有自己的日志代码来跟踪   命中数。

     

如果是前者,你需要一些东西   可以跟踪Web服务器日志   本身并做出这种区分。我的   主机计划附带webalizer,   这很好。

这是javascript代码,所以答案就是这样。

但是,知道如何使用其他方法跟踪下载(没有切换主机)会很高兴。

8 个答案:

答案 0 :(得分:38)

有趣的是我2天前为我的所有音乐写了一个php媒体库。我遇到了类似的问题。我正在为玩家使用http://musicplayer.sourceforge.net/。播放列表是通过php构建的。所有音乐请求都有一个名为xfer.php?file = WHATEVER

的脚本
$filename = base64_url_decode($_REQUEST['file']);
header("Cache-Control: public");
header('Content-disposition: attachment; filename='.basename($filename));
header("Content-Transfer-Encoding: binary");
header('Content-Length: '. filesize($filename));

//  Put either file counting code here. either a db or static files

//

readfile($filename);  //and spit the user the file


function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_,', '+/='));
}

当您调用文件时,请使用以下内容:

function base64_url_encode($input) {
     return strtr(base64_encode($input), '+/=', '-_,');
}

http://us.php.net/manual/en/function.base64-encode.php

如果您正在使用某些javascript或Flash播放器(例如JW播放器),要求实际链接为mp3文件或其他任何内容,您可以附加文本“& type = .mp3”,以便最终的链接变为就像是: “www.example.com/xfer.php?file=34842ffjfjxfh&type=.mp3”。这样看起来它以mp3扩展名结尾而不影响文件链接。

答案 1 :(得分:28)

使用您的httpd日志文件。安装http://awstats.sourceforge.net/

答案 2 :(得分:25)

使用bash:

grep mp3 /var/log/httpd/access_log | wc

答案 3 :(得分:13)

如果您的歌曲/二进制文件由apache提供,您可以轻松地访问access_log以查找下载次数。一个简单的post-logrotate脚本可以grep日志并在db中维护计数统计信息。 这具有性能优势,因为它不在您的实时请求代码路径中。执行离线统计等非关键操作是将网站扩展到大量用户的好主意。

答案 4 :(得分:12)

你甚至可以设置一个Apache .htaccess指令,将* .mp3请求转换为dubayou正在使用的查询字符串。它可能是保持直接请求的优雅方式,并且仍然能够将日志功能整合到响应中。

答案 5 :(得分:6)

播放链接是指向实际mp3文件的链接还是弹出播放器的某些javascript代码?

如果是后者,您可以轻松地在其中添加自己的日志记录代码,以跟踪其中的点击次数。

如果是前者,您需要能够跟踪Web服务器日志并进行区分的内容。我的托管计划附带了webalizer,它做得非常好。

答案 6 :(得分:3)

您的音乐库是否有数据库?如果在下载mp3时有任何服务器代码运行,那么您可以在那里添加额外的代码来增加播放次数。您也可以让javascript发出第二个请求以增加播放次数,但这可能会导致人/机器人错误地增加计数。

我曾经在互联网广播网站工作,我们使用单独的表来跟踪每首歌曲播放的时间。我们的流由运行icecast的perl脚本提供支持,因此每次新轨道开始播放时我们都会触发数据库请求。然后,为了计算播放次数,我们将运行一个查询来计算歌曲ID在播放日志中的次数。

答案 7 :(得分:3)

我使用AWStats /通过Web服务器日志读取的问题是,大量下载通常可以在日志中的数据块中拆分。这使得确切地协调下载的确切数量。

我建议使用Google Analytics Event Tracking,因为这会在每次点击下载链接时注册一次。