Статистика по количеству скачиваний
by Вредный • 24.02.2010 • php, программирование • Нет комментариев

Сегодня будет короткая заметка, посвященная статистике, ведь каждому, наверное, интересно, сколько раз скачали с его сайта тот или иной файл. Я не хотел делать все это дело на файлах, чтобы не захламлять сервер, пусть лучше эта информация хранится в базе данных.
Создаем файл конфигурации, чтобы в каждом файле пароли не хранить.
config.php
1 2 3 4 5 6 | <?php $CONFIG['mysql']['host']='localhost'; $CONFIG['mysql']['login']='root'; $CONFIG['mysql']['password']=''; $CONFIG['mysql']['db']='test'; ?> |
До того, как переходить к главному файлу нашей системы, нужно создать в базе данных таблицу с двумя полями и вставить туда пару записей о файлах, с которыми мы хотим работать.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | CREATE TABLE `downloads` ( `filename` TEXT NOT NULL , `counter` INT NOT NULL ) ENGINE = InnoDB; </pre> Теперь пару записей <pre class="sql" name="code"> INSERT INTO `test`.`downloads` ( `filename` , `counter` ) VALUES ( 'catalog.pdf', '0' ), ( 'catalog.rar', '0' ); |
А теперь главный файл, к которому мы и будем обращаться при расстановки ссылок для тех файлов, для которых мы хотим вести статистику скачиваний.
download.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php require_once 'config.php'; //соединение с БД или вывод ошибки и выход $conn = mysql_connect($CONFIG['mysql']['host'], $CONFIG['mysql']['login'], $CONFIG['mysql']['password']) or die(mysql_error()); @mysql_select_db($CONFIG['mysql']['db'], $conn); //проверяем какой файл пытаются скачать switch ($_GET['file']) { case 'catalogpdf': $sql = "UPDATE downloads SET `counter` = `counter` + 1 WHERE `filename`='catalog.pdf'"; mysql_query($sql); mysql_close($conn); header('Location: /files/catalog.pdf'); case 'mikasa2010rar': $sql = "UPDATE downloads SET `counter` = `counter` + 1 WHERE `filename`='catalog.rar'"; header('Location: /files/catalog.rar'); mysql_query($sql); mysql_close($conn); default: mysql_close($conn); break; } ?> |
Здесь ничего сложного, проверяем какой файл пытаются скачать и увеличиваем количество скачиваний в базе данных на единицу.
Файл вывода статистики counter.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php require_once 'config.php'; $conn = mysql_connect($CONFIG['mysql']['host'], $CONFIG['mysql']['login'], $CONFIG['mysql']['password']) or die('mysql error'); @mysql_select_db($CONFIG['mysql']['db'], $conn); $sql = 'SELECT downloads.filename, downloads.counter FROM downloads'; $res = mysql_query($sql, $conn); //составляем красивый вывод в таблице echo "<table cellspacing=10>"; while ($row = mysql_fetch_array($res)) { echo "<tr><td>"; echo $row['filename'] . '</td><td><b style="font-size: 16px; color: blue">' . $row['counter'] . '</b></td></tr>'; } echo "</table>"; ?> |
И теперь в том месте, где надо нам вывести статистику вставляем код
1 2 3 4 | <?php $stats = file_get_contents('http://localhost/downloader/counter.php'); echo $stats; ?> |
Ничего сложного как и все гениальное =)
Пример можно улучшить, если нужны более точные данные, например не хотим учитывать скачивания дважды с одного компьютера. Для этого нужно воспользоваться кукисами в файле download.php. А в тексте ссылки вместо прямого обращения к файлу, нужно указать скрипт:
1 2 3 | <a href="http://localhost/downloads/download.php?file=catalogpdf"> Скачать каталог в PDF формате </a> |
Вот и все, будьте в курсе количества скачиваний ваших файлов =)