Счетчик скачиваний файла на PHP + mySQL

Author Автор: Роман Чернышов    Опубликовано: 15 февраля 2012

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

Скрипт будет использовать PHP класс для работы с базой данных.

<?php
$folder = '/examples/'; // Папка с файлами
$ext 	= array('rar','zip'); // Устанавливаем разрешенные типы файлов для скачивания
$subfolder = true; // Разрешить скачивание из вложенных папок
 
	$settings = array(
	  'dbName' => '',
	  'dbUser' => '',
	  'dbPass' => '',
	  'dbHost' => 'localhost'
	 ); // Настройки подключения к БД
 
 
// Подключаем класс для работы с БД
include('lib/dbsql.class.php');
 
// Инициализируем подключение к БД
$DB = new DB_Engine('mysql', $settings['dbHost'], $settings['dbUser'], $settings['dbPass'], $settings['dbName']);
 
 
$filename=$_GET['f'];
$f=explode('.',$filename);
if(!in_array($f[count($f)-1], $ext)) die('Данный тип файла запрщен для скачивания');
 
$crc=md5($filename); // Генерируем хеш имени файла
$date=time(); // Текущее время
 
$sql="SELECT * FROM `rche_uploads` WHERE `crc` = '$crc' LIMIT 1";
$exrow=$DB->getAll($sql); // Берем из БД запись с таким хешем
if($_GET['event']=='show')
	{
	 echo "Скачали: {$exrow[0]['count']} раз(а), Последняя дата скачивания: ".date('H:i d.m.Y',$exrow[0]['date']);
	 exit;
	}
if(count($exrow)>0) // Если запись в БД с таким хешем есть увеличиваем счетчик, если нет вносим новую запись в БД
	{
	$count=$exrow[0]['count']+1; //Текущее значение счетчика увеличиваем на 1
	$sql="UPDATE `rche_uploads` SET `count` = '$count' WHERE `crc` = '$crc' LIMIT 1;";
	}
        else
	{
	$sql="INSERT INTO `rche_uploads` (`crc`,`count`,`date`) VALUES ('$crc','1','$date');";
	}
$DB->execute($sql); // Выполняем mySQL запрос
header("Location: {$folder}{$filename}"); // Переход на скачиваемый файл

Структура БД

CREATE TABLE IF NOT EXISTS `rche_uploads` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`crc` varchar(50) NOT NULL,
`count` int(11) NOT NULL,
`date` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Пример использования скрипта, для скачивания файла вызываем ссылки вида (переменная «f» содержит путь к файлу который требуется скачать):

http://rche.ru/upload2.php?f=854/upload2.zip

Для просмотра статистики по количеству и времени скачиваний, добавляем в запрос переменную event со значением show

http://rche.ru/upload2.php?f=854/upload2.zip&event=show

Исходники скрипта можно скачать по этой ссылке.

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

2 комментария to “Счетчик скачиваний файла на PHP + mySQL”

  • салаи 15.08.2013 в 8:39 дп

    Господи иисусе! Да почему просто не сделать тоже самое только через аякс и вывод количества скачиваний рядом с сылкой!
    Что же у всех так юзабилити хромает… ужас..

    • Роман Чернышов 23.08.2013 в 1:37 дп

      Ну вообще этот пример призван показать принцип работы, а аякс это уже по желанию и усмотрению каждого вебмастера индивидуально. Но опять же если задуматься: представим такую картину, на странице выводится информация о 10 файлах и количество скачиваний каждого — зачем нам делать запросы на аякс для получения информации о скачивании того или иного файла? в чем тут юзабилити? Ведь это дополнительно 10 аякс запросов к серверу…. не проще ли сразу вывести данную информацию сгенерированную PHP кодом рядом с файлом.
      И вообще статья не много не об этом!

Оставить комментарий на Роман Чернышов

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 159₽
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка