Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

Даунлоад на php. Подсчет кол-во скачиваний.   Найти похожие ветки 

 
SergP.   (2005-12-10 13:21) [0]

Нужно написать скрипт для даунлоада (чтобы подсчитывать кол-во раз скачиваний).

пишу пока так:


<html>
<head>
 <title>[Downloads]</title>
 <meta http-equiv="Content-Type" CONTENT="text/html; charset=windows-1251">
<?
$id=$HTTP_GET_VARS["id"];
include("config.php");

@mysql_query("update download set counter=counter+1 where id=$id");

$result=mysql_query("select filename,coment from download where id=$id");

$line=mysql_fetch_array($result);

print "<META http-equiv="refresh" content="2;URL=";
print "$line[0]";
print ""></head><body>";
print "Скачивание начнется через 2 секунды<br>";
print "Если Ваш браузер не поддерживает перенаправление,<br>";
print "то для скачивания перейдите по ссылке<br>";
print "<a href="";
print "$line[0]";
print """;
print ">$line[1]<a><br>";

print "</body>";
?>
</html>


Возникает проблема в том что если юзер начнет нажимать "обновить" или еще что-нить делать, то счетчик будет каждый раз увеличиваться, т.е. не будет правильно отображать реальное кол-во скачиваний.

Как попроще устранить эту проблему?


 
boriskb ©   (2005-12-10 13:24) [1]

http://www.webscript.ru/


 
VirEx ©   (2005-12-10 14:37) [2]

у меня примерно такая же проблема но мне Kerk посоветовал если на серваке стоит Апач, и есть модуль mod_rewrite, то нужно в корневой папке сайта записать файл .htaccess, он умеет перенаправлять все запросы через какойнить скрипт и вообще настраивает поведение сервера насчет запросов с клинетских машин, только я в синтаксисе вообще разобраться не могу... ну примерно что-то вот такое:

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/index.php
RewriteCond %{QUERY_STRING} "^action=downloadfile"
RewriteRule .* /compat.cgi [L,NS]


 
Kerk ©   (2005-12-10 14:39) [3]

VirEx ©   (10.12.05 14:37) [2]

Не о том, тут речь. Не о том :)


 
boriskb ©   (2005-12-10 15:02) [4]

VirEx ©   (10.12.05 14:37) [2]
папке сайта записать файл .htaccess


А апач сам сконфигурируется?
Судя по названию файла, подразумевается тонкая настройка апача.


 
Kerk ©   (2005-12-10 15:08) [5]

boriskb ©   (10.12.05 15:02) [4]
А апач сам сконфигурируется?


Сам. В приведенном примере Апач перенаправляет все запросы файла index.php, где есть параметр action=download на скрипт compat.cgi с сохранением параметров. Файла index.php у меня вообще нет. На старом движке был, теперь нет. Но все старые ссылки, благодаря .htaccess, работают.


 
boriskb ©   (2005-12-10 16:02) [6]

Kerk ©   (10.12.05 15:08) [5]

Тыды ОЙ :)


 
Kerk ©   (2005-12-18 15:38) [7]

Пишем в .htaccess
RewriteEngine on
RewriteCond %{REQUEST_URI} zip$
RewriteRule .* /counter.php?%{REQUEST_URI} [L,NS]


Далее скрипт counter.php должен увеличить счетчик и выдать файл. Имя запрашиваемого файла будет находиться в переменой окружения QUERY_STRING.

ИМХО, такое решение оптимально, т.к. и счетчик есть и ссылка на файл - прямая.


 
Piter ©   (2005-12-18 15:53) [8]

SergP.   (10.12.05 13:21)
Возникает проблема в том что если юзер начнет нажимать "обновить" или еще что-нить делать, то счетчик будет каждый раз увеличиваться


ну естественно, а как еще? У счетчиков такие же проблемы - есть лично хостов, а есть число уникальных посетителей.

С достаточной степенью точности можешь сделать так -  при скачивании добавляй IP в бан-лист минут на 20-30. Если IP уже в бан листе - то счетчик не должен увеличиваться.

Еще способ - при скачиании файла прописывай соответствующий параметр в куках. Соответственно, если в куках уже есть запись о скачивании этого файла - счетчик не увеличивается.

Можно сделать компбинацию этих методов.

А по другому никак :(

SergP.   (10.12.05 13:21)
print "<META http-equiv="refresh" content="2;URL=";
print "$line[0]";
print ""></head><body>";


идеологически неправильно. Если на хостинге PHP скрипту разрешено формировать заголовок, то:

header("Location: http://www.example.com/test.zip");

Читаем: http://php.rinet.ru/manual/ru/function.header.php

В этом случае не просто перенаправление средствами HTML, а именно заголовок HTTP ответа будет установлен в код перенаправления, что куда правильнее, это поддерживают все браузеры, менеджеры закачек и т.д.

Kerk ©   (18.12.05 15:38) [7]
алее скрипт counter.php должен увеличить счетчик и выдать файл. Имя запрашиваемого файла будет находиться в переменой окружения QUERY_STRING


это ты автору темы советуешь? А при чем здесь проблема обновления и увеличения счетчика?

Кстати, не рекомендую пользоваться mod_rewrite - средство, конечно, универсальное, но оно неоправданно грузит сервер, да и не на всех хостингах этот модуль подключен...


 
Piter ©   (2005-12-18 15:54) [9]

boriskb ©   (10.12.05 15:02) [4]
папке сайта записать файл .htaccess

А апач сам сконфигурируется?
Судя по названию файла, подразумевается тонкая настройка апача


хех :)))

.htaccess к тонкой настройке апача не имеет никакого отношения :)

Данный файл используется почти всеми, кто работает с апачем нормально :)


 
Kerk ©   (2005-12-18 16:01) [10]

Piter ©   (18.12.05 15:53) [8]
А при чем здесь проблема обновления и увеличения счетчика?


При том, что его счетчик идеологически неправильный. Я показал как надо. Предлагаемый мной метод более универсальный. Ссылку типа site.ru/download.php?id=234 ты ни в какой софт-архив не запостишь. А site.ru/file.zip - легко. К тому же выглядит оно более user-friendly.

> Кстати, не рекомендую пользоваться mod_rewrite

Не рекомендуй. От этого большинство сайтов им пользоваться не перестанут.


 
Kerk ©   (2005-12-18 16:06) [11]

А если вынести все файлы на отдельный домен, например.. типа dl.site.ru/file.zip .. и .htaccess сделать только в этом домене, то вообще красота получается.


 
Piter ©   (2005-12-18 16:07) [12]

Kerk ©   (18.12.05 16:01) [10]
Я показал как надо


как ты показал - так не надо :)

Kerk ©   (18.12.05 16:01) [10]
типа site.ru/download.php?id=234 ты ни в какой софт-архив не запостишь. А site.ru/file.zip - легко


хм, не понял логики. Ну а почему бы не сделать ссылки вида: site.ru/file.zip ? Зачем тут mod_rewrite?

Kerk ©   (18.12.05 16:01) [10]
Не рекомендуй. От этого большинство сайтов им пользоваться не перестанут


опять ты в Бога играешь. Откуда ты знаешь про большинство? Статистику делал?
И какой же хороший, популярный сайт использует mod_rewrite?

Профессиональные PHP программеры не используют mod_rewrite, потому что в этом зачастую просто нет необходимости, а при этом он не везде поддерживается, да еще и сервер загружает. Что при десятках тысяч запросов очень даже проявит себя.


 
Kerk ©   (2005-12-18 16:11) [13]

Piter ©   (18.12.05 16:07) [12]
Ну а почему бы не сделать ссылки вида: site.ru/file.zip ? Зачем тут mod_rewrite?


Потому, что без mod_rewrite мы количество скачиваний не посчитаем. А если охота в логи лезть, то тут вообще никаких счетчиков не надо.

> И какой же хороший, популярный сайт использует
> mod_rewrite?

Ну из того, что под руку попалось - http://sport-express.ru/
Почитай что-нибудь про псевдостатику, может, поймешь о чем я.

> Профессиональные PHP программеры не используют
> mod_rewrite

Полный бред. Использование mod_rewrite зачастую не связано с программированием вообще.


 
boriskb ©   (2005-12-18 16:16) [14]

Piter ©   (18.12.05 15:54) [9]
.htaccess к тонкой настройке апача не имеет никакого отношения :)


Не будь нудней чем я :)
Этот файл имено для настройки и предназначен.
А уж "тонко" или "толсто" это у кого как получится :))


 
Piter ©   (2005-12-18 16:18) [15]

Kerk ©   (18.12.05 16:11) [13]
Потому, что без mod_rewrite мы количество скачиваний не посчитаем


что за бред? PHP скрипт начисляет счетчик, перенаправляет к реальному месторасположению файла - какая разница, есть mod_rewrite или нет?

Kerk ©   (18.12.05 16:11) [13]
Ну из того, что под руку попалось - http://sport-express.ru/


а с чего ты взял, что они используют mod_rewrite?


 
Kerk ©   (2005-12-18 16:24) [16]

Piter ©   (18.12.05 16:18) [15]
PHP скрипт начисляет счетчик, перенаправляет к реальному месторасположению файла


Ссылку вида site.ru/dl.php?id=1322 в ни в какой софтархив не примут. Все требуют прямые ссылки.

> а с чего ты взял, что они используют mod_rewrite?

С того, что там используется очевидная псевдостатика? (ты про нее уже почитал?)
Посмотри как выглядят ссылки на статьи - http://news.sport-express.ru/online/ntext/11/nl113100.html
Неужели ты думаешь, что у них такая дикая привычка называть папки и файлы числами?
Url содержит параметры для запроса к БД. Файла /online/ntext/11/nl113100.html на сервере не существует, то что мы видим в браузере - результат деятельности скрипта.
Использование псевдостатики очень распространено в инернете.

Вот тебе еще пример - http://lenta.ru/


 
Piter ©   (2005-12-18 16:33) [17]

Kerk ©   (18.12.05 16:24) [16]

Хех, можно даже сказать ЛОЛ, я понял :)

Да ты получается таких элементарных вещей не знаешь, а уверен в себе, как архангел Гавриил (хотя ты бы не был Kerk"ом, если б было не так :)
Еще про псевдостатичку говоришь :)

Ты, судя по всему, решил, что ссылки вроде: domen.com/file.zip без mod_rewrite никак не реализовать. Странное заблуждение.

Рассказываю тогда. В .htaccess просто пишешь:

ErrorDocument 403 /redirect.php
ErrorDocument 404 /redirect.php


Соответственно, в скрипте redirect.php обрабатываешь URL и сам редиректишь куда надо. Это и богаче по возможностям, чем mod_rewrite, и эффективнее, если все правильно писать (по крайней мере, если PHP как модуль подцеплен).


 
Piter ©   (2005-12-18 16:35) [18]

Kerk ©   (18.12.05 16:24) [16]
осмотри как выглядят ссылки на статьи - http://news.sport-express.ru/online/ntext/11/nl113100.html


Kerk ©   (18.12.05 16:24) [16]
Вот тебе еще пример - http://lenta.ru/


соответственно, почему ты решил, что там используется mod_rewrite - я не понял.


 
Kerk ©   (2005-12-18 16:38) [19]

Piter ©   (18.12.05 16:33) [17]
ErrorDocument 403 /redirect.php
ErrorDocument 404 /redirect.php


Это еще что за бред? А если запрашиваемый файл на диске есть что произойдет? Ты не пытайся прикрутить сюда то, что для этого явно не предназначено.

А про псевдостатику почитай.


 
Kerk ©   (2005-12-18 16:39) [20]

Piter ©   (18.12.05 16:35) [18]
соответственно, почему ты решил, что там используется mod_rewrite - я не понял.


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


 
Piter ©   (2005-12-18 16:40) [21]

Kerk ©   (18.12.05 16:38) [19]
Это еще что за бред? А если запрашиваемый файл на диске есть что произойдет?


ты лучше сам почитай. А еще лучше исходники профессиональных скриптов посмотри.

Это комманда для Апача, если файл не найден - перенаправление на скрипт redirect.php


 
Kerk ©   (2005-12-18 16:40) [22]

Piter ©   (18.12.05 16:40) [21]
Это комманда для Апача, если файл не найден - перенаправление на скрипт redirect.php


Ну так а что произойдет, если файл найден?


 
Piter ©   (2005-12-18 16:42) [23]

Kerk ©   (18.12.05 16:38) [19]
А если запрашиваемый файл на диске есть что произойдет?


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

Ты хоть знаешь, что за код ошибки 404 в HTTP?


 
Kerk ©   (2005-12-18 16:43) [24]

Piter ©   (18.12.05 16:42) [23]
тогда ошибки 404 не будет, блин и произойдет обращение к этому файлу, который существует.


А нам этого не надо. Нам надо все запросы редиректить.

> Ты хоть знаешь, что за код ошибки 404 в HTTP?

Пальцы разогни, гнутые тебе не идут.


 
Piter ©   (2005-12-18 16:43) [25]

Kerk ©   (18.12.05 16:39) [20]
А я на это даже и не надеялся. Тебя только личные свидетельства админов этих сайтов убедят в чем-то и то врядли


ок, а я тебе говорю - на сайте lenta.ru не используется mod_rewrite.
Если будет возражать, то скажу, что тебя ничего не убедит.


 
Kerk ©   (2005-12-18 16:46) [26]

Piter ©   (18.12.05 16:43) [25]

Вот я об этом и говорю. Демагогией занимаешься.
Ты про то, как делается псевдостатика уже почитал?
Ты действительно думаешь, что перенаправить юзера на redirect.php, разобрать там параметры и перенаправить на нужный скрипт меньше грузить сервер, чем разбор параметров в .htaccess и перенаправление сразу на нужный скрипт? LOL


 
Piter ©   (2005-12-18 16:47) [27]

Kerk ©   (18.12.05 16:43) [24]
А нам этого не надо. Нам надо все запросы редиректить


ну ты уже заговорился, Kerk.

Итак, у тебя РЕАЛЬНО существует файл на сервере:

kerkzone.com/file.zip

Пользователь обращается к этому файлу. Этот файл скачается? НЕЕЕТ. Ведь Kerk"у нужно все запросы редиректить, итак запускается скрипт. Он подсчитывает количество скачек... и? Куда он будет редиректить?

Опять на: kerkzone.com/file.zip  ???

Открою секрет - опять сработает правило mod_rewrite и ... Твой сервак вместе с клиентом уйдет в бесконечную рекурсию.

Или как у тебя организовано?

Физически есть файл:

kerkzone.com/file.zip

Но есть еще его копия:

dl.kerkzone.com/file.zip

Куда ты и редиректишь. А нафига тогда спрашивается тебе дубликаты на сервере?

Как-то нелогично, ты не находишь?


 
Kerk ©   (2005-12-18 16:50) [28]

Piter ©   (18.12.05 16:47) [27]
Открою секрет - опять сработает правило mod_rewrite и ... Твой сервак вместе с клиентом уйдет в бесконечную рекурсию.


Не сработает. Я не буду делать никаких 301 или 302. Я выдам файл самим скриптом.


 
Piter ©   (2005-12-18 16:53) [29]

Kerk ©   (18.12.05 16:46) [26]
что перенаправить юзера на redirect.php, разобрать там параметры и перенаправить на нужный скрипт меньше грузить сервер, чем разбор параметров в .htaccess и перенаправление сразу на нужный скрипт? LOL


Что ЛОЛ? Ты сейчас неправ, и пытаешься сделать хорошую мину при плохой игре. Только что вообще чушь написал, о чем я тебе в [27] рассказал.

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

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

Я, кстати, сказать тоже экспериментов не ставил, но я хотя бы читал статьи владельцев крупных серверов, которые писали насколько меньше грузит сервер данный способ в отличии от mod_rewrite.
Почему так происходит? Не знаю, но это факт. По крайней мере, когда PHP как модуль установлен.


 
Kerk ©   (2005-12-18 16:54) [30]

Piter ©   (18.12.05 16:47) [27]
Как-то нелогично, ты не находишь?


Все полностью логично. Не надо пытаться использовать для редиректа то, что в общем случае для редиректа не предназначено - 404. Или ты предлагаешь при написании движка сайта задокументировать имена файлов, которые нельзя использовать?


 
Kerk ©   (2005-12-18 16:56) [31]

Piter ©   (18.12.05 16:53) [29]

Ты, если на кого-то ссылаешься, давай ссылку. Иначе - пустой треп.

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

А подумать не пробовал? В варианте с 404 мы имеем на один шаг больше - вызов промежуточного скрипта.


 
Piter ©   (2005-12-18 16:58) [32]

Kerk ©   (18.12.05 16:50) [28]
Я не буду делать никаких 301 или 302. Я выдам файл самим скриптом


и ты это называешь хорошей идеей?

Это еще больше затормозит работу сервера, если ты вручную будешь передавать файл. Представляешь, какое время работы будет у скрипта, если начнет качать Dial-Up"щик файл размером мегабайт в 10 хотя бы?

А если скачек тысячи? Тысячи одновременно запущенных сриптов отдачи? Не смеши, это не оптимально.

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


 
Kerk ©   (2005-12-18 17:02) [33]

Piter ©   (18.12.05 16:58) [32]
и ты это называешь хорошей идеей?


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

Для файлопомойки, конечно, не оптимально.


 
Piter ©   (2005-12-18 17:02) [34]

Kerk ©   (18.12.05 16:56) [31]
Ты, если на кого-то ссылаешься, давай ссылку


например, http://kpnemo.ru

И всякие отзывы о сайте можешь оставить при себе. Движок написан крайне грамотно,

Kerk ©   (18.12.05 16:54) [30]
Не надо пытаться использовать для редиректа то, что в общем случае для редиректа не предназначено - 404


что значит не предназачено? У тебя более глубокие доводы против этого способа есть?

Файла нет - возникает ошибка 404, происходит перенаправление на файл-скрипт. Он там опять же может установить 404, может что угодно сделать. Что не так?

Kerk ©   (18.12.05 16:56) [31]
А подумать не пробовал? В варианте с 404 мы имеем на один шаг больше - вызов промежуточного скрипта


думать ты можешь сколько угодно. Я тебе назвал экспериментальный файл. Еще раз, ПОЧЕМУ так происходит - я не знаю. Но так происходит.

Ты можешь упереться рогом и говорит, что так НЕ ДОЛЖНО быть. Но ведь так есть.


 
Piter ©   (2005-12-18 17:07) [35]

Kerk ©   (18.12.05 17:02) [33]
Это хорошая идея для случаев, когда нужно контролировать скачивание файлов


ты говорил про оптимальность. Твой способ НЕ оптимальный.

mod_rewrite более медленный способ по сравнению с тем, что я привел.

Собственно, если тебе так нравится выдавать файлы с помощью скрипта - дело твое, но использование mod_rewrite совершенно лишнее.


 
Kerk ©   (2005-12-18 17:17) [36]

Piter ©   (18.12.05 17:02) [34]
что значит не предназачено? У тебя более глубокие доводы против этого способа есть?

Есть:

Или ты предлагаешь при написании движка сайта
задокументировать имена файлов, которые нельзя
использовать?


> Но ведь так есть.

Конечно. Ты как всегда прав.

P.S. А про то как работает псевдостатика. Вообще полезно иногда читать что-нибудь кроме блогов. С тобой как всегда скучно.

http://forum.searchengines.ru/showthread.php?t=31433
http://forum.searchengines.ru/showthread.php?t=29941

Piter ©   (18.12.05 17:07) [35]

Да, да, да, ты прав! Добей меня танцем!


 
Piter ©   (2005-12-18 18:03) [37]

Kerk ©   (18.12.05 17:17) [36]
Или ты предлагаешь при написании движка сайта
задокументировать имена файлов, которые нельзя
использовать?


а какие имена нельзя использовать в моем способе?

Kerk ©   (18.12.05 17:17) [36]
Конечно. Ты как всегда прав.


Судя по тону фразы, ты как раз считаешь, что я не прав. Ну и в чем я не прав? У тебя хоть какие-то аргументы есть?

Я тебе назвал свои аргументы. Точнее, они даже не мои. Но ты просил линк - я дал тебе линк.
Ты же не привел НИЧЕГО.

Более того, ты об этом способе вчера даже еще не знал! Что не помешало тебе буквально в течении 10 минут сделать вывод, что способ, конечно, куда хуже, чем mod_rewrite.

Ты сейчас заведешь полемику куда угодно, но никогда не скажешь - "да, блин, не знал - надо попробовать".
Более того, когда ты подумаешь впоследствии - вполне возможно ты начнешь использовать данный способ.

Kerk ©   (18.12.05 17:17) [36]
Вообще полезно иногда читать что-нибудь кроме блогов


да, да. И дает ссылку на форум. Форум, конечно, куда более правдивое средство информации, чем блог. Даже не чем блог, а чем информация от владельца ОЧЕНЬ популярного блога. Человека, который САМ этот блог пишет, а не просто поставил готовые скрипты.

Kerk ©   (18.12.05 17:17) [36]
http://forum.searchengines.ru/showthread.php?t=31433
http://forum.searchengines.ru/showthread.php?t=29941


И что? Я там даже не нашел упоминаний о способе, который привел.
Более того, на вопрос:

"Или может кто знает другой способ как страницы в псевдостатику перевести"

никто не привел "моего" способа.

И даже судя по репликам, типа:

"http://gazeta.ru/2005/12/07/oa_180712.shtml

Они, наверное, не знают, что Николай Попков перестраховывается? Я в смысле, что нагрузка у газеты как у сотни попковых"


они также как и ты раньше, просто и не знают других способов. Они также уверены, что если видят ЧПУ-урл, то значит это mode_rewrite.

Ну и нафиг ты дал ссылку на эти топики? Сосвсем аргументов нет? :)


 
Piter ©   (2005-12-18 18:07) [38]

Kerk ©   (18.12.05 17:17) [36]
С тобой как всегда скучно


несомненно. Фактически я доказал, что ты неправ, я привел аргументы, хотя бы мнения других, известных более-менее людей. Ты же по теме:

mode_rewrite vs ErrorDocument

не привел ни одного аргумента. Да и как ты мог их привести, если о втором узнал пару часов назад. Только в стиле "Сам подумай, ведь ДОЛЖНО быть ..."


 
Piter ©   (2005-12-18 18:07) [39]

Piter ©   (18.12.05 18:07) [38]
Фактически я доказал, что ты неправ


так что с чего бы тебе было со мной весело :)


 
Piter ©   (2005-12-18 18:09) [40]

Я даже знаю, как ты будешь комментировать мою фразу:

"Фактически я доказал, что ты неправ"

Ты применишь стандартный демагогический прием:

"Да, ты бог, ты конечно прав, мы все тебе поклоняемся, о великий Piter".

То есть, начнешь юродствовать за неименение аргументов :)

P.S. Хотя после этого поста уже не начнешь :)



Страницы: 1 2 вся ветка

Текущий архив: 2006.01.15;
Скачать: CL | DM;

Наверх




Память: 0.61 MB
Время: 0.052 c
2-1135666466
utter
2005-12-27 09:54
2006.01.15
Random генерит одинаковые значения


5-1120834246
Aleksandr.
2005-07-08 18:50
2006.01.15
Как Bmp включить в package?


14-1135336508
Bless
2005-12-23 14:15
2006.01.15
Вот досада!


2-1135329585
SergeyG
2005-12-23 12:19
2006.01.15
Как к программе (проекту) подключить форму ранее разработанной


3-1131993856
Serg1981
2005-11-14 21:44
2006.01.15
Добавление поля в БД