【问题标题】:Best way to transparently log downloads?透明记录下载的最佳方式?
【发布时间】:2010-10-04 09:18:09
【问题描述】:

我有一个个人项目已经上线一段时间了。我一直通过这样做来记录下载量:

  • 当用户单击下载链接时,它会点击一个 PHP 脚本,该脚本将一些信息写入表中。
  • 写入数据后,脚本将返回实际文件的路径。
  • 然后用户可以将文件保存到他们的硬盘上,就像下载其他文件一样。

这已经足够好一段时间了;但是,它会阻止用户使用right-click > save target as...,因为他们实际上只会看到download.php 出现在“文件保存..”对话框中。因此,下载项目的唯一方法是在链接上单击鼠标左键。

我想改进这个过程,以便用户可以使用他/她最熟悉的任何方法下载项目。那么,有哪些更好的方法可以透明地记录下载而不妨碍用户呢?

物有所值,这台机器是标准的 LAMP 堆栈,所以这里没有 .NET 选项。

【问题讨论】:

    标签: lamp download


    【解决方案1】:

    设置谷歌分析? :)

    【讨论】:

    • 我认为 Google Analytics(分析)不会跟踪文件下载。仅浏览量。
    • 在文件下载链接上,您可以添加将事件写入分析的 onClick
    【解决方案2】:

    answer 详细介绍了如何使用传输页面记录下载以及在有人单击链接后立即开始下载文件。我最近测试了它的右键单击。

    我正在使用 php 中间人来记录文件下载。格式为 http://192.168.1.1/xfer.php?file=Li9zb25ncy9HTE9XX0xlYXZlIFlvdXIgSGF0IE9uLm1wMw 的 URL 会生成另存为...和在 Firefox 中单击鼠标左键的文件名。

    这是我的 xfer.php

    <?
    $filename = base64_url_decode($_GET['file']);
    if ($_GET['file']){
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header('Content-disposition: attachment; filename='.str_replace(" ", "_",basename($filename)));
        header("Content-Transfer-Encoding: binary");
        header('Content-Length: '. filesize($filename));
        readfile($filename);
    }
    $fh = fopen("test.html","a");
    fwrite($fh,basename($filename)."\n<br />");
    fclose($fh);
    function base64_url_decode($input) {
        return base64_decode(strtr($input, '-_,', '+/='));
    }
    ?>
    

    而链接到xfer.php的页面是

    $link = "xfer.php?file=".base64_url_encode("./songs/$key");
    

    $key 是文件名,songs 是保存文件名的文件夹。

    【讨论】:

      【解决方案3】:

      这取自php-documentation,但也可以使用不同的脚本语言:

      <?php
      // We'll be outputting a PDF
      header('Content-type: application/pdf');
      
      // It will be called downloaded.pdf
      header('Content-Disposition: attachment; filename="downloaded.pdf"');
      
      // The PDF source is in original.pdf
      readfile('original.pdf');
      ?>
      

      HTTP-Header Content-Disposition 告诉它保存为下载。

      另一种选择是定期检查您的日志文件,就像每天使用脚本一样。

      【讨论】:

      • 是的,我曾考虑过自动日志解析路径,但我喜欢能够将信息记录在数据库中。不过,感谢 PHP 的建议 - 我可能最终会走这条路。
      • 您可以使用脚本填充该数据库,具体取决于数据库的最新程度。
      【解决方案4】:

      这就是很多网站使用下载链接将您带到另一个页面的原因,该页面将在页面加载时自动开始下载,并为用户提供直接下载的链接。大多数情况下,这是一种获取广告展示页面浏览量的方法,但它也有助于更轻松地跟踪谁在下载他们的文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-23
        相关资源
        最近更新 更多