Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Подсчет количества скачивания


Автор: admsasha 28.6.2005, 19:22
Код

...
....
print "Cache-control: no-cache\n";
print "Content-type: application/force-download\n";
print "Content-Length: ".(-s $fullpath)."\n";
print "Content-Disposition: filename=$file \n\n";
open (file, "< $fullpath"); while (<file>){print};close file;


вот скрипт через который скачивается файл. я хочу сделать подсчет скачек.
Проблема в том что качальщики типа reget делают несколько потоков и получается код выполняется несколько раз... т.е. счетчик вставить не получится, так как он будет показывать количество потоков при закачке...

Как сделать правильный счетчик ? (т.е. имено количество скачек, а не потоков)

Автор: sharq 28.6.2005, 20:23
admsasha, можешь сделать так: есть ссылка скачать, при нажатии вызывается счетчик и отображается страница с ссылкой на реальную скачку файла, после чего вызывается скрипт передачи файла. То есть делаешь на раз-два-три.
Это первое, что пришло в голову...

Автор: admsasha 29.6.2005, 02:02
Цитата(sharq @ 29.6.2005, 03:23)
admsasha, можешь сделать так: есть ссылка скачать, при нажатии вызывается счетчик и отображается страница с ссылкой на реальную скачку файла, после чего вызывается скрипт передачи файла.

Это равносильно счетчику просмотров ссылки... но не загрузки ее...

Автор: korob2001 29.6.2005, 03:27
Каждому файлу присваивай уникальный Id, после чего создай программу, которая будет по этому Id находить имя файла и собственно возвращать его, она же будет и подсчитывать кол во скачиваний. Для этого достаточно одного DBM файла, где Id - это ключь, а имя файла значение, можно в нём же и считать или создать второй DBM для подсчёта.
Допустим эта программа будет называться counter.pl.
Теперь там, где ты указываешь ссылку на файл, просто прописывай такой путь: /cgi-bin/counter.pl?id=74515452697236327

Автор: admsasha 29.6.2005, 03:34
Цитата(korob2001 @ 29.6.2005, 10:27)
Каждому файлу присваивай уникальный Id, после чего создай программу, которая будет по этому Id находить имя файла и собственно возвращать его, она же будет и подсчитывать кол во скачиваний. Для этого достаточно одного DBM файла, где Id - это ключь, а имя файла значение, можно в нём же и считать или создать второй DBM для подсчёта.


так то она и работает... проблема как раз в том что, многосессионные закачки, этот URL запрашивают много раз... т.е. встроенный счетчик будет показывать количестно сессий, а не закачек. При односессионной закачки всё будет верно.

Автор: korob2001 29.6.2005, 03:37
Т.е. ты хочешь убедиться в том, что юзер дождался полной загрузки файла??? Или я что-то не понял. smile

Автор: admsasha 29.6.2005, 03:42
вообщем то верно....

т.е. мне не обязательно что бы он докачал....
я хочу ограничить скачку файла по количеству раз... для этого и нужен счетчик.
причем, с одного компа могут качать не только один раз... т.е. скачал, второй раз можно скачать, счетчик покажет "скачено 2 раза".

P.S. на icq не отвечаешь или нельзя, быстрее было бы... хоть смогу объяснить сразу что и как...

Автор: Usya 29.6.2005, 07:37
Цитата
т.е. счетчик вставить не получится, так как он будет показывать количество потоков при закачке...

1) Считывай IP-адрес - он то должен оставаться одним и тем же для нескольких потоков, потом удалишь повторяющиеся в течении заданного интервала времени...
2) Можно с плюшками поработать. В плюшке достаточно хранить количество закачек. При кажной новой закачке обновлять плюшку. Если разница между временем последней и предпоследней модификациями плюшки превышает заданное, увеличить количество закачек на единицу.

P.s. Правда с плюшками я не работал, но кажется должно пойти. Единственное, их можно просто удалить с компа и начать качать поновой...

Автор: admsasha 29.6.2005, 07:45
Цитата(Usya @ 29.6.2005, 14:37)
1) Считывай IP-адрес - он то должен оставаться одним и тем же для нескольких потоков, потом удалишь повторяющиеся в течении заданного интервала времени...


так а если мне надо два раза скачать одно и тоже ? например через 4 часа после первого. Учет по времени не поставить, так как, кто-то три часа качать будет , а кто-то 30 минут....

Автор: korob2001 29.6.2005, 08:44
admsasha
Создавай в базе данных таблицу и обновляй поле счётчика при каждом обращении к программе, которая будет посредником между файлом и ссылкой. Вот собственно и всё.

Автор: admsasha 29.6.2005, 11:10
Код

    my $file="background1024.rar";
    my $fullpath="unload/$file";

    open (file, ">> unload/111.txt");
        print file "download";
        print file " \n";
    close file;

    print "Cache-control: no-cache\n";
    print "Content-type:  application/force-download\n";
    print "Content-Length: ".(-s $fullpath)."\n";
    print "Content-Disposition: filename=$file \n\n";
    open (file, "< $fullpath"); while (<file>){print};close file;


скачиваю файл через reget, в файле вот что..
Цитата
download
download
download
download


т.е. у меня reget запустил 4 сессии... т.е. счетчик будет "4". а надо что бы "1" было....



Автор: admsasha 3.7.2005, 09:33
придумал решение

if(exists($ENV{'HTTP_RANGE'})){
// не считать
}else{
/// считать
}

думаю понятно. теперь правильно всё считает... именно сколько закачек, даже при много поточной закачки

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)