Вообще, так как ты редиректишь пользователя туда, где файл лежит физически, то твою "считалку" легко обойти. Отдавай файл скриптом...
Код:
<?
$file_name = './who.zip';
if (!file_exists($file_name)) {
header ("HTTP/1.0 404 Not Found");
exit;
}
$fsize = filesize($file_name);
$ftime = date("D, d M Y H:i:s T", filemtime($file_name));
$file_handler = @fopen($file_name, "rb");
if (!$file_handler) {
header ("HTTP/1.0 403 Forbidden");
exit;
}
if ($HTTP_SERVER_VARS["HTTP_RANGE"]) {
$range = $HTTP_SERVER_VARS["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if ($range) {
fseek($file_handler, $range);
}
}
if ($range) {
header("HTTP/1.1 206 Partial Content");
} else {
header("HTTP/1.1 200 OK");
}
header("Content-Disposition: attachment; filename=myfile.zip");
header("Last-Modified: $ftime");
header("Accept-Ranges: bytes");
header("Content-Length: ".($fsize-$range));
header("Content-Range: bytes $range-".($fsize-1)."/".$fsize);
header("Content-type: application/octet-stream");
while (!feof ($file_handler)) {
echo fread($file_handler, 100);
}
fclose($file_handler);
exit;
?>
Осталось добавить считалку. К стати теперь можнос читать, какой объем выкачал пользователь.
Простенький, но для начала может хватить.
Социальные закладки