我想实现一个简单的计数器来跟踪文件下载了多少次。我们在这里讨论的是大文件,所以我无法使用 readfile()、fpassthru() 或类似的方法将整个文件加载到 php 的内存中。
此外,对于这个解决方案,我想使用直接链接,然后通过 jQuery.ajax 更新计数器。我之所以选择这种方式,是因为带有 X-Sendfile 的 download.php 对我来说不起作用 - 通常我会收到多次调用脚本以进行一次下载,这完全打乱了我的计数。(这可能是由于 Chrome 对 favicon 的额外请求,但我不确定。另外,这不是问题。)
这基本上是我的 index.html:
<a href="downloads/bla.zip"><span class="countDownload">bla</span></a>
这是jQuery:
$(document).ready(function() {
$("body").on("click", ".countDownload", function() {
var filename = $(this).parent().attr("href");
filename = filename.split("/");
filename = filename[filename.length - 1]
var request = $.ajax({
url: "counter.php?file=" + filename
});
request.done(function(msg) {
alert("yes");
});
request.fail(function(jqXHR, textStatus) {
alert("no");
});
// if this is here, ajax works, but download fails
return false;
});
});
如果“返回false;” 在那里,ajax请求会成功,但是文件下载会被抑制。如果“返回false;” 不存在,ajax 请求将失败(“取消”),但反过来文件下载工作正常。
任何帮助表示赞赏!