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

Обновлено: 07.07.2024

Очередным вопросом, которым я недавно заинтересовался при настройке своего незатейливого авторского проекта, встал вопрос о том, как же считать количество скачиваний того или иного файла, выложенного здесь. Логичнее всего было предположить, что для этого требуется очередной плагин, какой-нибудь download manager, или что попроще – download counter. Порыскав в интернете, оказалось, что как обычно, этих плагинов вагон и маленькая тележка. А вот обзоров их – опять-таки нет. Что выбрать – абсолютно не понятно, и как обычно, пришлось все тестировать на себе. А по результатам тестирования и получился данный обзорчик. Писался он весьма долго, при этом целью не было досканальное тестирование всех приведенных плагинов с полным рассмотрением их настроек, поэтому детальных скриншотов каждого – вы не найдете, но вот ключевые настройки будут. О некоторых вообще говорить не хотелось – настолько бестолковые, но коль уж посмотрел, то совсем ничего не написать – было жалко.

Введение.

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

  • Необходимо, чтобы количество скачиваний отображалось где-нибудь в админке, с возможностью сортировки – сколько скачали за день, за неделю, месяц, год, всего
  • Желательно, чтобы можно было посмотреть графики/диаграммы скачивания файлов относительно друг друга
  • Желательно, чтобы можно было посмотреть графики/диаграммы скачивания файлов во времени
  • Желательно, чтобы велась статистика по тому, когда был последний раз скачан файл
  • Возможность выводить информацию рядом со ссылкой о том, сколько раз был скачен файл, а также его размер, и дату закачки для пользователя, который только собирается его скачать. Ну или не выводить – по желанию админа
  • Возможность вставки кода, за это отвечающего, отдельной кнопочкой в панели написания постов редактора TinyMCE (quicktag-ами пользоваться не люблю)
  • Возможность ограничить скорость скачивания (так, на всякий случай)
  • Навешивание на данный плагин функции аплоада (загрузки файлов на сервер) – наоборот, нафиг не сдалась. У меня и фтп неплохо работает. Но если не будет особо мешать – то пусть остается
  • Неплохо бы иметь возможность прилепить красивую кнопочку к ссылке на скачивание – хотя у меня теперь достаточно прописать >

Чтобы получилось так:

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

Такой вот небольшой списочек.

Обзор

После того, как мы определились с ТЗ, приступим к рассмотрению того, что непосредственно нам предлагается.

1. Плагин Download Counter 1.2, скачанный вот здесь.

Изначально страница плагина находилась здесь, но автор уже более 4 лет его не поддерживает. Создаем в директории плагинов для него еще одну папку у меня – download-counter, забрасываем туда оба файла. В результате – где бы вы думали? – в записях появляются для него настройки. Очень оригинально, но ладно.

Download Counter plugin for wordpress

Заходим внутрь, прописываем путь к файлу download-manager.php (я очень не люблю всякую ерунду прямо в корень бросать). И смотрим, что у нас получилось. Загружаем файл, проверяем, скачивается ли в ручном режиме, если прямую ссылку в браузере ввести, вводим путь в плагине, чтобы создать счетчик. В теории должен создаться ID, который потом необходимо будет везде вставлять. А не получилось ничего – выдает ошибку “Ошибка – Невозможно сохранить запись”. Ну ок, уговорили, перебрасываем в корень download-manager.php – опять ничего, таже ошибка. Ну и черт с тобою, золотая рыбка, не хватало, чтобы я еще разбирался в плагинах, которые автору-то нафиг не сдались. Тем более функциональности – практически ноль.

2. Плагин Download Counter Advanced 1.1, скачанный здесь же.

Download Counter Advanced plugin for wordpress

Добавляем имена папок, которые у нас есть на сервере в каталоге downloads (в настройках “рубрики и директории”), чтобы проще было выбирать путь к файлам. Если их не добавить – то придется загружать все в корень downloads. Сохраняем, можно добавлять загрузки. Вот что у нас примерно получается.

Download Counter Advanced plugin for wordpress

Счетчик кликов на кнопку или количество скачиваний


Довольно таки часто мне встречаются вопросы о том, как сделать счетчик кликов на кнопку или же количество скачиваний.
Вот решил наконец реализовать данную задачу на благо людям :) Не хочется мне писать отдельную инструкцию, упаковывать его в архив, поэтому придется вам поработать самостоятельно, ручками :)
В корне сайта создать папку с названием click_counter задать ей права на запись 777.
В ней создать PHP файл index.php с содержимым:

Специально для VIP группы реализовал вариант с учетом только уникальных кликов.


UPD: Для хранения данных в БД [12.08.2020]
Выполнить запрос в БД:

Что ж, поздравляю. Основная часть сделана :)
Теперь перейдем к шаблону и JS обработчику.
В качестве триггера, для желаемой кнопки добавляем имя класса click_count. Пример, есть:

Надо сделать так:

Осталось подключить js, для этого в принципе в любой подключенный к шаблону JS файл можно вставить такой код:

Отдельно стоит отметить - где и как будет отображаться само число счетчика. На примере того же html кода, что я приводил выше, мы получим:


29.07.18 PHP 1925

php-contol-file

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

Итак, как это можно реализовать? Ниже будут рассмотрены необходимые шаги.

Подготовка папки и файлов

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

Лучше конечно вынести такую папку выше корневой директории сайта – тогда никто не сможет напрямую получить доступ к файлу через адрес в строке браузера. Называться такая папка может как угодно, например, private-directory. Когда папка создана и файлы размещены, можно перейти к следующему шагу.

Составление формата адресов

Теперь, когда прямое скачивание файлов запрещено, нужно решить, как будут выглядеть адреса скачиваемых файлов. Адреса можно использовать любые, как с расширением на конце, так и без – они все равно будут виртуальными. Например, адреса могут выглядеть примерно следующим образом: /download/file, /download/file.jpg или /download/files/file.jpg.

Реализация функции запрета и подсчета количества скачиваний файла

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

Написание функции для скачивания файла через PHP

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

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

Счетчик скачиваний для WordPress

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

Сегодня я решил поделиться плагином выводящим счетчик скачивания для WordPress, рядом со ссылкой на файл:

ссылке ( Скачали: 1572 чел. )

А также в качестве дополнения к предыдущей статье (Пишем плагин WordPress) хочу продемонстрировать процесс написания данного плагина, и поделиться полученным опытом с тобой уважаемый читатель.

Для того, чтобы было понято, что мы будем делать, давайте определимся с тем, что должно получиться:

Допустим, у нас есть ссылка вида:

a href = "/upload/count_download.zip" title = "Счетчик скачиваний" > Cчетчик скачиваний для WordPress своими руками / a >

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

a rel = 'nofollow' href = '/download_count.php?url=upload/catalog.zip' title = 'Счетчик скачиваний' > Счетчик скачиваний для WordPress своими руками / a > / noindex> strong > (Файл скачали: 5 человек) / strong >

Cуть работы плагина:

Исходную ссылку мы оформляем в соответствии с требованием плагина т.е. если у нас было:

a href = "/upload/countdownload.zip" title = "Счетчик скачиваний" > Cчетчик скачиваний для WordPress своими руками / a >

то с помощью панели администратора, в форме редактирования страниц, вводим шорткод следующего вида:

[ download_file url = "upload/countdownload.zip" title = "Счетчик скачиваний" ]
счетчик скачиваний для WordPress своими руками
[ / download_file ]

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

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

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

Все ясно? Правильно не все! Что за скрипт такой download_count.php и откуда он в корневой дирректории сайта?

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

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

С теорией разобрались, перейдем к написанию кода:

При активации плагина счетчика в админке WordPress, сразу создаем таблицу в базе в которую будем сохранять данные.

function install_download_file ( ) < //при активации плагина создаем необходимую таблицу
global $wpdb ;
$wpdb -> query ( 'CREATE TABLE IF NOT EXISTS `download_file` (
`url` varchar(254) NOT NULL,
`count` int(9) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;' ) ;
>
register_activation_hook ( __FILE__ , 'install_download_file' ) ;

Далее пишем функцию, которая будет заменять шорткод на нужную ссылку

function count_download_file ( $atts , $content = null ) //Выводим счетчик скачиваний, рядом с ссылкой
<
// считываем данные из таблицы плагина о количестве скачиваний данного файла
global $wpdb ;
$result = $wpdb -> get_results ( "SELECT * FROM `download_file` WHERE `url` LIKE '" . $atts [ "url" ] . "'" , ARRAY_A ) ;

if ( ! isset ( $atts [ "title" ] ) ) $atts [ "title" ] = $content ;

if ( $result [ 0 ] [ 'url' ] ) //если в таблицы существует информация о количестве нажатий, то выводим ее
return "

И вешаем ее в качестве обрабатывающей функции на шорткод download_file.

Вот и написали плагин счетчика скачиваний для WordPress…

Стоп, а где в коде происходит генерация файла download_count.php? Чуть не забыл важный момент.

Добавим следующий код в начало функции function count_download_file

if (!file_exists("download_count.php")) <
$text='
if ( $_SERVER [ "HTTP_REFERER" ] ) <
define ( "DB_NAME" , "'.DB_NAME.'" ) ;
define ( "DB_USER" , "'.DB_USER.'" ) ;
define ( "DB_PASSWORD" , "'.DB_PASSWORD.'" ) ;
define ( "DB_HOST" , "'.DB_HOST.'" ) ;
$connect = mysql_connect ( DB_HOST , DB_USER , DB_PASSWORD ) ;
mysql_select_db ( DB_NAME , $connect ) ;
if ( mysql_query ( "UPDATE download_file SET count=(count + 1) WHERE url=\'< $_GET [" url "]>\'" ) ) <
header ( "Content-Length: " . filesize ( $_GET [ "url" ] ) ) ;
header ( "Content-type: application/octed-stream" ) ;
header ( "Content-Disposition: attachment; filename sy0">. basename ( $_GET [ "url" ] ) ) ;
readfile ( $_GET [ "url" ] ) ;
>
else echo "К сожалению файл удален. Вернуться . $_SERVER [ "HTTP_REFERER" ] . ">назад." ;
>
else echo "Пожалуйста не открывайте этот фаил напрямую, у него другие функции." ;

?> ';
$fp = fopen ("download_count.php", "w");
fwrite($fp,$text);
fclose($fp);
>

После активации плагина, и обновлении в браузере страницы с шорткодом, в корне сайта появится скрипт download_count.php.

Можете посмотреть на его код, прошу сильно не кидайте помидорами, т.к. не нашел более рационального способа обратиться к базе данных без танцев с бубном. Дело в том, что при подключении конфигурационного файла wp-config.php кроме определения директив выводятся еще и заголовки, что не сочетается с корректной работой плагина.

В общем и целом получился легковесный плагин: Cчетчик скачиваний для WordPress, для использования которого нужно лишь активировать его, и правильно составить шорткод. Инструкция по составлению шорткода находится прям в описании плагина.

Читайте также: