如何统计下载的文件

时间:2011-12-20 14:53:55

标签: php javascript jquery download counter

我正在开发一个网站,允许访问者使用以下代码下载各种文档:

<input type="button" class="downloadedFile" value="Download File" onclick="window.location.href=\'documents/' . $docsRow['docFileName'] . '\'" />

$ docsRow ['docFileName'] 是每个文档的路径,从MySQL数据库中检索。

更大的图片是这些文件是jQuery手风琴,每个手风琴窗格都是一个包含一个或多个文档的类 - 如下:

<div id="accordion">
<h3><a href="#">LEAD5220 - Leader as Change Agent</a></h3>
<div>
    <p class="className">Leader as Change Agent</p>
    <p class="classNumber">LEAD5220</p>
        <hr class="classSeparator" />
        <table width="95%">
            <tr>
                <td><strong>Document Name:</strong> Generic Annotation Format</td>
                <td width="100px" align="right"><input type="button" class="downloadedFile" value="Download File" onclick="window.location.href='documents/Generic Annotation Format.docx'" /></td>
            </tr>
            <tr>
                <td colspan="2"><strong>Description:</strong> This document can be used as a template for your annotations in the annotated bibliography forums.</td>
            </tr>
        </table>
        <hr class="classSeparator" />
        ...

我的客户希望能够计算每个文档的下载次数每个课程

我知道我可以通过javascript检测按钮点击,就“每个类”部分而言,我可以使用jQuery来检测按钮点击哪个类表,但我不明白的是1)如何将信息导入PHP / MySQL代码以记录到数据库,以及2)我是否只能检测按钮点击,或者我是否可以检测用户是否实际将文件下载到他们的计算机(这些是PDF,DOC,XLS文件)。

感谢任何人的帮助!

3 个答案:

答案 0 :(得分:4)

有两种方法可以计算下载次数。一种是链接到记录每次点击的PHP页面,而不是重定向到实际文件。类似的东西:

<?
$class = $_REQUEST['class'];
$doc = $_REQUEST['doc'];

// insert the code here to get and update the number of hits to this class/doc

// now redirect
header('Location: http://www.example.com/thefile.doc');
    ?>

在html中,链接可以是:

<a href="getfile.php?class=X&doc=Y">download file</a>

我个人更喜欢的第二种方法是用ajax记录命中数。当用户单击要下载的链接时,请执行以下操作:

$('a.thelink').click( function() {
    $.post ('getfile.php', { class: X, doc: Y });
});

这样您就可以发送要记录的数据,并且用户也会停留在同一页面中。

如果您需要更多信息,请与我们联系。

答案 1 :(得分:3)

第二部分:你不知道。如果用户请求了该文件,他就得到了。 HTTP是无状态的,因此一旦点击,您只能尝试检查传输给用户的金额是否等于文档的大小......但这实际上是不可能的。

对于第一部分:不要直接链接到文档,而是链接到PHP页面,而不是计算下载,尊重参数,并重定向到实际文档。或者它可以返回文档的二进制内容,无论你喜欢什么。

答案 2 :(得分:0)

另一个方法是直接通过记录每次下载的php文档提供文档。

您将php文件称为document-counter.php?file=path/file.ext

不要忘记urlencode($filename);

文档counter.php

<?php
if ( ! isset($_GET['file'])) {
    die ('_GET file not set');
}

$file = realpath($_SERVER['DOCUMENT_ROOT'] . urldecode($_GET['file']));
if ( ! file_exists($file)) {
    die($file . ' not exists');
}

$size = filesize($imageFile);
$extension = pathinfo ($imageFile, PATHINFO_EXTENSION);

header('HTTP/1.1 200 OK');
header('Pragma: no-cache');
// Attention: the following line can vary depending of the extension of the file !
header('Content-Type: application/' . $extension);
header('Content-Length: ' . $size);

// here, ***after the header***, goes all the stuff for incrementing the counters and
// saving them

readfile($imageFile);