счетчик скачиваний

antonim

Новичок
счетчик скачиваний

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

x-yuri

Новичок
В идеале хотелось бы делать временные ссылки работающие не более 10-20 минут, но как это сделать не знаю
пишешь скрипт, через который будут скачиваться файлы. Список ссылок будет хранится в бд вместе с датой/временем создания ссылки. По ней и будешь отдавать/не отдавать файл

-~{}~ 15.01.09 14:01:

но для счетчика хватит и постоянной ссылки
 

antonim

Новичок
не подскажете, как "не отдавать" файл по ссылке на него?



"но для счетчика хватит и постоянной ссылки" я это понимаю, но вопорс в том как считать по этой ссылке кол-во скачиваний?
 

x-yuri

Новичок
не ставь нигде ссылку на файл, ставь ссылку на скрипт, который будет отдавать файл. А скрипт уже должен решать, отдавать файл или нет

-~{}~ 15.01.09 14:12:

и считать количество скачиваний
 

N3K

Новичок
По идее чёт типо этого должно получиться.

.../script.php?hesh=мусор
скрипт
PHP:
$files=mysql_query("select file_name,real_name form files where hash='$_GET[hash]'",$db);
if (mysql_num_rows($files) > 0) {
  $get_name=mysql_result($files,0,'file_name'); // имя которое увидит пользователь
  $true_name=mysql_result($files,0,'real_name'); // настоящее имя файла
  $f_size=filesize($true_name);
  header("Content-type: application/zip");
  header("Content-Disposition: attachment; filename=".$get_name.";");
  header("Accept-Ranges: bytes");
  header("Content-Length: ".$f_size);
  readfile($true_name);
}
 

x-yuri

Новичок
это будут постоянные ссылки. Если ты действительно хочешь временные ссылки, нужна таблица со ссылками и временем создания ссылок. Каждый раз выводя ссылку на файл в страницу тебе надо добавлять ее в таблицу

почему Content-Type: zip, у тебя все файлы - zip-архивы?

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

N3K

Новичок
Ну дык будут постоянные - т.к. тут нет 1-й строки с сменой хеша... )) Я не писал это т.к. для каждого проект смену урлы надо делать по разному.
 

x-yuri

Новичок
так у тебя одному файлу соответствует один хэш, а ссылка не одна будет, или я ошибаюсь?
 

N3K

Новичок
я думаю можно создать сколько угодно полей в бд с одинаковым file_name и real_name(в данном случае) и добавить им разный хеш. это уже зависит от реализации проекта :)
 

dimagolov

Новичок
x-yuri, N3K, может хватит? Исключая тот факт, что пихание элементов $_GET в SQL приводит к инъекциям, приведенный код не имеет ни малейшего отношения к задаче ТС-а, а именно "как считать по этой ссылке кол-во скачиваний".

Ответ на вопрос ТС-а дан *****ом и он наиболее оптимальный.
 

x-yuri

Новичок
возможно, имеет смысл выдавать ссылки с числовым id - поиск по таблице будет быстрее

-~{}~ 15.01.09 18:05:

пихание элементов $_GET в SQL приводит к инъекциям
не заметил

dimagolov
есть один нюанс
Нужно это для того, чтобы не кидали там на форумах просто ссылку на файл, а кидали ссылку на сайт, с которого скачать можно файл
-~{}~ 15.01.09 18:07:

Ответ на вопрос ТС-а дан *****ом и он наиболее оптимальный
а почему он оптимальный? потому что по журналу можно определить, сколько файлов було скачано до конца? или потому что php не участвует в выдаче файлов?
 

dimagolov

Новичок
x-yuri, тут 2 задачи.
1. Считать кол-во скачиваний
2. Ограничивать доступ

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

August

Новичок
Прочел и неврубился нафига так все усложнять. Небольшой скриптик в 20 строк сделает и уникальные ссылки и временные и счетчик прикрутит. А тут почитал начиная с мод реврайтов заканчивая нгинксом задача реашется О_о
 

August

Новичок
Ну, все от задачи зависит, я конкретно к задаче сабжа имел в виду, вдруг там текстовые файлики по 2 кб?
 

pilot911

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

ну и получать в пхп запрос только если симлинк на файл отсутствует - это можно сделать через htaccess - тогда никаких проблем с нагрузкой на сервер и выдачей файла через пхп не будт
 
Сверху