Подсчёт кол-во загрузок

Статус
В этой теме нельзя размещать новые ответы.

Braniack

Профессор
Регистрация
25 Май 2008
Сообщения
160
Реакции
46
Вообщем мне нужно реализовать примерно следущее.

У меня есть софт-портал. Все файлы хранятся у меня на сервере, скачка идет по прямым ссылкам, т.е _http://mysait/soft/programma.zip

Мне нужен скрипт, который будет высчитывать кол-во всех обращений к папке где софт, и выводить статистику. (На какую ссылку (какую прогру) больше всего загружали).

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

Вообщем подскажите как решить данную проблему (если можно решение :) :) )
 
Либо отдавать файлы не напрямую, а через скрипт и вести учёт в нём, либо парсить логи web-сервера.
 
Да я вот тут набросал скрипт

PHP:
<?php
// Счетчик по первому файлу: 

if ($info==1) {
header("location: http://blbla/soft/proga.zip"); 
$file=fopen("info.txt","a+");
flock($file,LOCK_EX); 
$count=fread($file,100);
$count++; 
ftruncate($file,0); 
fwrite($file,$count); 
flock($file,LOCK_UN); 
fclose($file); 
}

?>

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

Либо отдавать файлы не напрямую, а через скрипт и вести учёт в нём, либо парсить логи web-сервера.

С этого места, можно по подробнее?
 
  • Заблокирован
  • #4
Модификация первого варианта: с помощью mod_rewrite перекидывать все обращения к файлам на скрипт, занимающийся учетом. Ничего вручную прописывать не надо, для ведения статистики можно использовать БД.
Правда, придется программно отдавать файлы.
 
Зачем?
Достаточно редиректа со скрипта на прямую ссылку.


Мм, по подробнее если не сложно как сделать относительно моего скрипта. Т.к суть моего скрипта состоит в том, что я обращаюсь не к файлу а к СКРИПТУ, а он уже в свою очередь в Location: переадресовывает на файл.

А как реаизовать то что ты говоришь, покажи плз
 
PHP:
<?php
// пишешь статистику

$file_url = 'http://реальное_расположение файла'; // прямая ссылка на файл
header('Location: '.$file_url);
 
Если данные по программе извлекаются из БД, то тогда можно сделать отдельную страницу loadings_programm.php, на которой будет происходить загрузка программы. В данном примере мы взяли таблицу programm в которой храница описание программы и всё остальное.
В данную таблицу надо добавить 2 поля.
1-ое поле loadings в котором будет храниться число скачиваний.
2-ое поле reference в котором будет храниться ссылка на программу.

На странице описания программы вставляем ссылку, в которой методом GET будет передаваться id программы в файл loadings_programm.php:

Код:
<a href="loadings_programm.php?id=<?php echo $myrow ['id'];?>" target="_blank">Скачать программу</a>


В файле loadings_programm.php пишем следующий код:

PHP:
<?php 
/*Соединяемся с базой данных*/
$db = mysql_connect ("localhost","имя пользователя","пароль");
mysql_select_db ("имя Базы Данных",$db);
/*конец*/

/*$id присваеваем значение id программы которое мы передовали по ссылке*/
if (isset($_GET['id'])) {$id = $_GET['id'];}
/*конец*/

/*Вытаскиваем из БД число скачиваний из поля [B]loadings [/B]и ссылку из поля [B]reference[/B]*/
$result = mysql_query("SELECT loadings,reference FROM programm WHERE id='$id'",$db);
$myrow = mysql_fetch_array ($result); 

/*Обновляем поле скачиваний и прибовляем 1 к числу скачиваний*/
$new_loadings = $myrow['loadings'] + 1;
$update = mysql_query ("UPDATE programm SET loadings='$new_loadings' WHERE id='$id'",$db);
/*конец*/

$url = $myrow ['reference'];   
 
$URL="$url";header("Location:$URL");
exit();
?>

Добавлено через 9 минут
Если вы будите использовать пример приведённый выше, то обязательно в файле robots.txt запретите индекс файла loadings_programm.php.
Иначе Yandex будет ругаться. А иногда и может забанить, у меня такое уже случалось, но после того как в robots.txt запретил индекс данного файла вроде всё нормально.
 
  • Заблокирован
  • #9
что то не пойму, а чем вариант с mode rewrite не устраивает?.. имхо это действительно верный путь - обработать прямы ссылки..

т.е. в htaccess пишем что то вроде
Код:
RewriteEngine on
RewriteRule ^programs/(.*)$ programs_log.php?program=$1
а в programs_log.php напр
PHP:
$program = $_GET['program'];

if( empty($program) ){
// обработка прямого обращения
exit();
}

$conn = mysql_connect ( 'mysql_host', 'имя пользователя', 'пароль');
mysql_select_db ( 'имя базы', $conn );

mysql_query( 'INSERT INTO programs_log (  `program` ) VALUES ( " ' . mysql_real_escape_string( $program ) . ' " )
ON DUPLICATE KEY UPDATE count = count + 1', $conn );

header('Location: ' . $program);

структура mysql таблицы такова
[SQL]
CREATE TABLE `programs_log` (
`program` varchar(255) NOT NULL default '',
`count` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`program`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251
[/SQL]

в общем случае вроде все..

зы.. синтаксис не проверял, писал сходу
 
  • Заблокирован
  • #10
Помойму на 4dle.ru валяется мод, который отдаёт файлы через скрипт. и ТАм идёт не переадресация. Там ставится определённый хедер и идёт чтение файла
ЗЫ Скорость загрузки тоже можно регулировать
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху