ファイルがダウンロードされた回数を追跡する単純なカウンターを実装したいと考えています。ここでは大きなファイルについて話しているので、ファイル全体を php のメモリにロードする readfile() や fpassthru() などを使用する方法はありません。
また、このソリューションでは、直接リンクを使用してから、jQuery.ajax を介してカウンターを更新したいと考えています。私がこの方法を選んだのは、X-Sendfile を使用した download.php がうまくいかなかったためです。1 回のダウンロードでスクリプトを複数回呼び出すことが多く、カウントが完全に台無しになりました。(これは、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 リクエストは失敗します (「キャンセル」) が、ファイルのダウンロードは正常に機能しています。
どんな助けでも大歓迎です!