在 Apache 目录列表中显示下载次数

在 Apache 目录列表中显示下载次数

我有一个正在运行的 Apache html 服务器,其中包含标准目录列表。是否可以添加一个额外的参数来显示每个文件旁边的下载次数?

答案1

Mod_AutoIndex 不具备此类功能。我不知道有哪个模块具备此功能,或者除了外部脚本之外还有什么方法可以实现此功能。

您可以创建一个快速脚本,计算日志中每个文件的下载量,然后通过文件AddDescription中的指令将其添加.htaccess。这样就可以跟踪日志中出现的下载量(通常只能追溯到几天或几周前)。

答案2

您无法在目录列表上执行此操作,您可以做的是放置一个简单的 PHP 文件,该文件将列出目录内容(谷歌搜索“php 文件列表目录内容”)并以这种方式编辑它以在每个文件旁边显示下载计数器。

您可以通过解析 Apache 访问日志文件来获取下载次数。

但是,这种设置不推荐用于大型网站,因为会产生大量的流量。并且它不适用于您无权访问服务器日志文件的共享托管。

我不熟悉您的设置,所以我无法给出更具体的答案。

答案3

我会选择下载链接上的 jQuery 事件监听器,并通过 PHP 在服务器端完成所有操作。这可能不是万无一失的,但对用户的影响并不大。

如果您想做这样的事情,那么您首先需要以一种可以通过 jQuery 访问的方式对按钮进行分组;还有其他方法可以在 jQuery 中选择多个元素,但最简单的方法是使它们都成为特定类的成员。

然后,您可以使用该函数循环遍历该类 .each()。因此,为了初始化页面;即让所有页面内容正常工作;您需要循环遍历每个按钮并向 PHP 脚本发出发布请求;需要发送给 PHP 脚本的只是下载的 ID。这在下面代码的第 1 部分中完成。

第 2 部分是设置下载时的事件侦听器。同样,只需在整个类上放置一个事件侦听器,我们就可以检测到对其中任何一个的点击;然后通过访问它的 id 来识别它来自哪个按钮。(注意:为简单起见;使标记中的 id 与数据库中的 id 相同)

然后,这会向 php 脚本发出另一个 post 请求;但会提供一个附加参数 - “download”。实际上,与下载相对应的值实际上并不重要;因为这种情况很简单,用户要么下载,要么不下载。因此,在代码的 PHP 部分(稍后)中,我们甚至不检查它的值;我们只是检查它是否存在。

$(document).ready(function(){
  /* [[PART 1]]: loop through every
element in the .button class*/
  $(".button").each(function (e) {
    /* get it's ID (which is equal to the download id stored in the db */
    var id = e.target.id;
    /* Post the download id to ranking.php; then echo the returned value to an element with the id of 'count<num>'; where num is the download id. */
    $.post( 'ranking.php', { 'id' :

我建议使用 jQuery,因为它提供了足够的语法糖,使事情变得非常简单。此外,通过使用 jQuery - 如果您愿意,您将在未来打开许多可能性的大门。服务器端是 PHP 接管的地方。实际上,所有这些需要做的就是检查是否 download设置,并回显下载次数。(如果设置了“下载”参数,则显然会使用数据库增加数字)

这可以通过类似以下方式实现...

<?php
    mysql_connect(localhost,$user,$password);@mysql_select_db($database) or die
( "Unable to select database");
    if(! isset($_POST['id']) {
         //die error!
    }
    /* if $_POST['download'] isn't set, then just get the current download number and echo it back to the browser */
    if(! isset($_POST['download'] ){

上述示例在简单情况下是可行的(显然需要更正数据库函数),但显然 - 这可能不是有效的代码,因为我实际上是在吃晚饭时输入的!当然,这只是为了让您了解一个可能的解决方案。(如果您决定做类似的事情,我已经演示了不好的做法 - mysql 操作现在最好使用 mysqli* 函数或 PDO 来完成)

查找 PHP My SQL 文档;希望这能为您指明正确的方向。现在,或者,据我所知,您不太喜欢 jQuery(一旦您熟悉它,它就很棒!),您与 jQuery 解决方案一起使用的 PHP 脚本可以单独使用。只需更改$_POST[]$_GET[],正如其他答案所说,使用类似 的 URL ranking.php?id=;但是,您需要考虑在数据库查询完成后让 PHP 脚本传递文件。

它还留下了一个关于下载数量的显示问题;因为如果没有 AJAX,您将不得不在 HTML 标记中嵌入一些 PHP。我希望我已经编辑了它以使其更有意义,并为您提供了另一种选择的概述!

相关内容