Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подсчет количества скачиваний
 
 автор: Алексей85   (05.01.2009 в 23:02)   письмо автору
 
 

Для подсчета количества скачиваний файлов использую следующий скрипт:

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, а на гораздо большее значение. Подскажите как решить эту проблему?

  Ответить  
 
 автор: Trianon   (05.01.2009 в 23:13)   письмо автору
 
   для: Алексей85   (05.01.2009 в 23:02)
 

Эдак Вы считаете число запросов, а не число скачиваний.
Любой процесс загрузки будучи приостановлен/возобновлен будет формировать очередной запрос
Любой многопоточный downloader формирует на один файл несколько запросов.
Число скачиваний имеет смысл считать не по финальной ссылке, а по предварительной.

Скрипт содержит грубые ошибки протокола, так что чинить его в частностях подсчета смысла нет.

  Ответить  
 
 автор: Алексей85   (05.01.2009 в 23:27)   письмо автору
 
   для: Trianon   (05.01.2009 в 23:13)
 

А можно по подробней про
>Число скачиваний имеет смысл считать не по финальной ссылке, а по предварительной.

и про грубые ошибки протокола

  Ответить  
 
 автор: Trianon   (05.01.2009 в 23:31)   письмо автору
 
   для: Алексей85   (05.01.2009 в 23:27)
 

>А можно по подробней про
>>Число скачиваний имеет смысл считать не по финальной ссылке, а по предварительной.
по окончательной ссылке
конечно:
Эдак Вы считаете число запросов, а не число скачиваний.
Любой процесс загрузки будучи приостановлен/возобновлен будет формировать очередной запрос
Любой многопоточный downloader формирует на один файл несколько запросов.
Все эти запросы Вы пытаетесь посчитать как разные.


>и про грубые ошибки протокола
Поле заголовка запроса Range: имеет вовсе не такой простой формат, как предполагает этот скрипт.

еще подробнее в RFC-2616

  Ответить  
 
 автор: Алексей85   (06.01.2009 в 00:05)   письмо автору
 
   для: Trianon   (05.01.2009 в 23:31)
 

Так и не понял как подсчитать именно число скачиваний а не число запросов. Можно привести пример кода или дать ссылку на какой-нибудь похожий скрипт.

  Ответить  
 
 автор: Алексей85   (06.01.2009 в 18:40)   письмо автору
 
   для: Алексей85   (06.01.2009 в 00:05)
 

Поменял местами сторки в коде:

<?php
.........
// обновляем счетчик в базе данных     
downloadStream($filename);
$update mysql_query("UPDATE download SET downloads = '$new_downloads'  WHERE id='$id'",$db); 
?>

теперь при закачке FlashGetом счетчик увеличивается на 1. Но возникла другая проблема: при закачке файла обычным браузером счетчик иногда вобще изменяется, так и остается прежнее значение.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования