代码之家  ›  专栏  ›  技术社区  ›  Grant

如何跟踪文件下载

  •  73
  • Grant  · 技术社区  · 16 年前

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

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


    播放链接是否与实际链接 MP3文件或一些javascript代码 弹出一个玩家?

    如果是后者,您可以轻松添加 在那里拥有日志代码来跟踪 点击数。

    如果是前者,你需要一些东西 可以跟踪Web服务器日志 把它本身和它区别开来。我的 托管计划与WebAlizer一起提供, 这样做很好。

    这是javascript代码,所以可以回答这个问题。

    但是,如果知道如何使用其他方法(不切换主机)跟踪下载,那就更好了。

    8 回复  |  直到 7 年前
        1
  •  38
  •   Daniel    7 年前

    有趣的是,我两天前为我所有的音乐写了一个PHP媒体库。我也有类似的问题。我在用 http://musicplayer.sourceforge.net/ 为了球员。播放列表是通过PHP构建的。所有音乐请求都有一个名为xfer.php的脚本?文件=

    $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=0.mp3”,这样最终链接就变成: “www.example.com/xfer.php?文件=34842ffjfjxfh&type=.mp3“。这样看起来它以MP3扩展名结尾,而不会影响文件链接。

        2
  •  29
  •   Tim Boland    13 年前

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

        3
  •  24
  •   randomx    15 年前

    使用BASH:

    grep mp3 /var/log/httpd/access_log | wc
    
        4
  •  13
  •   Haacked    16 年前

    您甚至可以设置一个apache.htaccess指令,将*.mp3请求转换为您正在使用的查询字符串dubayo。这可能是一种保持直接请求并仍能将日志函数滑入响应的优雅方法。

        5
  •  13
  •   Vinay Y S    16 年前

    如果您的Song/Binary文件是由Apache提供的,那么您可以很容易地对访问日志进行grep,以了解下载的数量。一个简单的日志后轮转脚本可以使日志变灰并在数据库中维护您的计数统计信息。 这有性能优势,因为它不在您的实时请求代码路径中。离线做一些非关键的事情,比如统计数据,是将你的网站扩展到大量用户的一个好主意。

        6
  •  7
  •   Dillie-O    16 年前

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

    如果是后者,您可以很容易地在其中添加您自己的日志代码来跟踪命中的次数。

    如果是前者,您将需要能够跟踪Web服务器日志本身并进行区分的东西。我的托管计划附带了Webalizer,它可以很好地做到这一点。

        7
  •  3
  •   Mike H    16 年前

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

    我曾经在一个互联网电台工作,我们用不同的表格来跟踪每首歌的播放时间。我们的流由运行ICecast的Perl脚本提供支持,因此每当新的曲目开始播放时,我们都会触发一个数据库请求。然后,为了计算播放计数,我们将运行一个查询来计算一首歌的ID在播放日志中的次数。

        8
  •  3
  •   icc97    9 年前

    我对awstats/通过Web服务器日志读取之类的东西有一个问题,那就是大量的下载通常可以在日志中分割成数据块。这使得协调下载的确切数量相当困难。

    我建议谷歌分析 Event Tracking ,因为这将注册一次每次点击下载链接。