我正在开发一个网站,允许访问者使用以下代码下载各种文档:
<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文件)。
感谢任何人的帮助!
答案 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);