任务是创建一个控制器来计算文件下载次数。它还必须能够解决失败或取消的下载。我想知道是否有人知道实现这一目标的最佳方式。
$file = $_GET['download'];
if (ob_get_level()) {
ob_end_clean();
}
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
return filesize($file);`
$size = filesize($file);
然后,如果给定的字节数大约等于文件大小:
if ( $size < given bytes) {
$handle = fopen("counter.txt", "r");
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$buffer=$buffer+1;
}
fclose($handle);
$fp = fopen("counter.txt", "w");
$test = fwrite( $fp, $buffer);
fclose($fp);
}
如何知道服务器在点击链接后发送给用户的字节数?
答案 0 :(得分:1)
我将从应该发表的评论开始:
您已将此标记为javascript,但您的问题似乎与javascript无关。请不要这样做。
我假设您了解脚本暴露的安全漏洞/您并不关心它。
您对输出缓冲的处理是错误的。
return filesize($ file);
标题('过期:0');
标题('Pragma:public');
关于你的问题 - 全部涵盖in the manual:
<?php
ignore_user_abort(1);
$file = $_GET['download'];
if (!is_readable($file)) {
die "No such file";
}
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Cache-Control: max-age=0; must-revalidate');
header('Content-Length: ' . filesize($file));
$count=0;
$ih=fopen($file, 'r');
while (CONNECTION_NORMAL==connection_status() && !feof($ih)) {
print fgets($ih, 4096);
}
log_completion(feof($ih));
顺便说一句:如果文件被下载,这不会给出准确的记录 - 你只能告诉内容是否已经离开了PHP。