如何跟踪文件下载

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

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


播放链接是否与实际链接相关   MP3文件或一些JavaScript代码   弹出一个球员?

     如果是后者,你可以轻松添加你的   在那里跟踪自己的日志代码   点击次数。     如果前者,你需要一些东西   可以跟踪Web服务器日志   本身并做出区分。我的   托管计划附带webalizer,   这很好。

这是JavaScript代码,所以答案。

但是,知道如何使用其他方法跟踪下载(不需要切换主机)会很好。

0
额外 编辑
意见: 3

8 答案

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

0
额外

播放链接是一个链接到实际的mp3文件或一些JavaScript代码,弹出播放器?

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

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

0
额外

有趣的是我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。基于64位encode.php

If you are using some JavaScript or a flash player (JW player for example) that requires the actual link to be an mp3 file or whatever, you can append the text "&type=.mp3" so the final linke becomes something like: "www.example.com/xfer.php?file=34842ffjfjxfh&type=.mp3". That way it looks like it ends with an mp3 extension without affecting the file link.

0
额外
@anarchOi:最简单的方法是比较GET参数$ _REQUEST ['file']和已知好文件名的白名单。例如,您存储文件的目录中的所有文件的列表。确保你只有使用该目录来存储你想要下载的文件...
额外 作者 BlueRaja - Danny Pflughoeft,
@tmsimont,您是否找到了降低内存消耗的方法?
额外 作者 ezpresso,
如果文件太大,流量很大,这会炸掉服务器的内存限制。
额外 作者 tmsimont,
@ezpresso雅检查了这个问题上的链接: stackoverflow.com/questions/6627952/… (也有趣的是,我会回复我回复6年前发布的东西哈哈
额外 作者 tmsimont,
此脚本中存在目录遍历漏洞!攻击者可以通过xfer.php?file = .. / .. / .. / passwd或其他任何他们想要的东西!小心!!!
额外 作者 Alex Weinstein,
如何修复“目录遍历漏洞”?
额外 作者 anarchOi,

我在AWStats /通过Web服务器日志进行读取时遇到的问题是,大量下载通常会在日志中的数据块中进行拆分。这使得很难下载确切的下载数量。

我建议Google Analytics(分析)事件跟踪,因为这将会注册一次每次点击下载链接。

0
额外

使用bash:

grep mp3 /var/log/httpd/access_log | wc
0
额外

Use your httpd log files. Install http://awstats.sourceforge.net/

0
额外

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

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

0
额外

如果你的歌曲/二进制文件是由apache提供的,你可以很容易的grep access_log找出下载次数。一个简单的后logrotate脚本可以grep日志和维护你的计数统计数据库。 由于不在您的实时请求代码路径中,因此具有性能优势。将诸如统计离线等非关键事项做为脱机是将网站扩展到大量用户的好主意。

0
额外