|
|
|
| Для подсчета количества скачиваний файлов использую следующий скрипт:
function downloadStream($filename)
{
$fd = fopen($filename, "rb");
if (isset($_SERVER["HTTP_RANGE"])) {
$range = $_SERVER["HTTP_RANGE"];
$range = str_replace("bytes=", "", $range);
$range = str_replace("-", "", $range);
if ($range) {
fseek($fd, $range);
}
}
if (isset($range)) {
header("HTTP/1.1 206 Partial Content");
} else {
header("HTTP/1.1 200 OK");
$range=0;
}
$fsize = filesize($filename);
header("Cache-control: private");
header("Content-Type: application/octet-stream");
header("Content-Length: ".($fsize-$range));
header("Content-Range: bytes $range-".($fsize -1)."/".$fsize);
header("Content-Disposition: attachment; filename=".basename($filename));
header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");
fpassthru($fd);
fclose($fd);
}
// обновлем счетчик в базе данных
$update = mysql_query("UPDATE download SET downloads = '$new_downloads' WHERE id='$id'",$db);
downloadStream($filename);
|
Возникла проблема при скачивании файла FlashGetом счетчик увеличивается не на 1, а на гораздо большее значение. Подскажите как решить эту проблему? | |
|
|
|
|
|
|
|
для: Алексей85
(05.01.2009 в 23:02)
| | Эдак Вы считаете число запросов, а не число скачиваний.
Любой процесс загрузки будучи приостановлен/возобновлен будет формировать очередной запрос
Любой многопоточный downloader формирует на один файл несколько запросов.
Число скачиваний имеет смысл считать не по финальной ссылке, а по предварительной.
Скрипт содержит грубые ошибки протокола, так что чинить его в частностях подсчета смысла нет. | |
|
|
|
|
|
|
|
для: Trianon
(05.01.2009 в 23:13)
| | А можно по подробней про
>Число скачиваний имеет смысл считать не по финальной ссылке, а по предварительной.
и про грубые ошибки протокола | |
|
|
|
|
|
|
|
для: Алексей85
(05.01.2009 в 23:27)
| | >А можно по подробней про
>>Число скачиваний имеет смысл считать не по финальной ссылке, а по предварительной.
по окончательной ссылке
конечно:
Эдак Вы считаете число запросов, а не число скачиваний.
Любой процесс загрузки будучи приостановлен/возобновлен будет формировать очередной запрос
Любой многопоточный downloader формирует на один файл несколько запросов.
Все эти запросы Вы пытаетесь посчитать как разные.
>и про грубые ошибки протокола
Поле заголовка запроса Range: имеет вовсе не такой простой формат, как предполагает этот скрипт.
еще подробнее в RFC-2616 | |
|
|
|
|
|
|
|
для: Trianon
(05.01.2009 в 23:31)
| | Так и не понял как подсчитать именно число скачиваний а не число запросов. Можно привести пример кода или дать ссылку на какой-нибудь похожий скрипт. | |
|
|
|
|
|
|
|
для: Алексей85
(06.01.2009 в 00:05)
| | Поменял местами сторки в коде:
<?php
.........
// обновляем счетчик в базе данных
downloadStream($filename);
$update = mysql_query("UPDATE download SET downloads = '$new_downloads' WHERE id='$id'",$db);
?>
|
теперь при закачке FlashGetом счетчик увеличивается на 1. Но возникла другая проблема: при закачке файла обычным браузером счетчик иногда вобще изменяется, так и остается прежнее значение. | |
|
|
|