php -如何跟踪文件下载

Translate

我有一个网站,可以在Flash Player中播放mp3。如果用户单击“播放”,则Flash Player会自动下载mp3并开始播放。

有没有一种简便的方法来跟踪特定歌曲剪辑(或任何二进制文件)已被下载多少次?


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

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

如果是前者,则需要一些可以跟踪Web服务器日志本身并进行区分的东西。我的托管计划与Webalizer一起提供,可以很好地完成此任务。

这是一个javascript代码,因此可以回答。

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

This question and all comments follow the "Attribution Required."

所有的回答

Translate

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

$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/zh/function.base64-encode.php

如果您使用的某些JavaScript或Flash Player(例如JW Player)要求实际链接为mp3文件或其他内容,则可以附加文本“&type = .mp3”,这样最终链接将变为: .example.com / xfer.php?file = 34842ffjfjxfh&type = .mp3“。这样,它看起来以mp3扩展名结尾而不会影响文件链接。

来源
Translate

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

来源
Translate

使用bash:

grep mp3 /var/log/httpd/access_log | wc
来源
Translate

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

来源
Translate

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

来源
Translate

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

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

如果是前者,则需要一些可以跟踪Web服务器日志本身并进行区分的东西。我的托管计划附带了webalizer,可以很好地完成此任务。

来源
Translate

您的音乐库有数据库吗?如果下载mp3时有任何服务器代码在运行,则可以在其中添加额外的代码以增加播放次数。您可能还让javascript再次请求增加播放次数,但这可能导致人员/机器人错误地增加播放次数。

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

来源
Translate

我遇到类似AWStats /通过Web服务器日志读取的问题,因为大型下载通常可以拆分为日志中的数据块。这使得协调确切的下载数量变得非常困难。

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

来源
上一个问题:
c# -压缩/解压缩