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

Author Роман Чернышов    Category PHP     Tags Комментариев 2 Дата 15 Фев

counter Счетчик скачиваний файла на PHP + mySQLНе знаю как остальным, но мне очень часто требуется подсчитывать количество скачиваний файла с сервера. Причем так уж выходит, что эта задача возникает от проекта к проекту, в виду чего я решил набросать небольшой простеньких скрипт на 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=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

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

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

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

https://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 кодом рядом с файлом.
      И вообще статья не много не об этом!

Оставить комментарий

О блоге и авторе

Добро пожаловать на блог веб-разработчика! На протяжении многих лет, начиная с 2009 года, я занимаюсь созданием специализированных сайтов, сервисов и крупных веб-порталов. Мною было создано несколько сотен сайтов, большинство из которых работают на ПО созданном под заказ, а также на готовом ПО которое я разрабатываю на протяжении всего периода моей деятельности. Это: CMS "Совместные покупки", CMS "osRealty", CMS "Спорт прогнозы" и многое другое.

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

Поиск по блогу
Категории
Архив
Новое на сайте
Блогеры пишут
  • Роман Чернышов: Для работы капчи на PHP 5.6, замените в файле class.captcha.php строку 264 $ifunc( $this -> i [...]
  • Роман Чернышов: Схема такая: 1) На сайте есть виртуальные кошельки (далее ВК) 2) При пополнении пользователем ВК, [...]
  • Александр: Может скрипт комментариев блокирует сообщения с кодом? Или как длинный текст не проходит?
  • Александр: Пытаюсь в который раз здесь показать код, но страница обновляется, и не сообщения, ни любого оповеще [...]
  • Роман Чернышов: Лично у меня интерес к продаже ссылок пропал уже давно. Преимущество сапы, это то - что ссылки можно [...]
Портфолио Все работы


www.detskiy-mir.net
www.detskydoctor.ru
www.betelit.ru
www.all-alliance.ru
www.videogonok.ru
www.carpfishing.by
www.property-greek.com
www.domcons.ru

с 2009 года по сегодняшний день, создано более 300 сайтов...