Устанавливаем счетчик скачиваний — обзор плагинов для Вордпресс. Создаем счетчик загрузок файла с помощью PHP и MySQL Сохранение текстовых и графических файлов

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

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

Как на сайте WordPress установить счетчик скачиваний?

Среди инструментов WordPress нет каких-либо возможностей увидеть эту статистику. Поэтому будем использовать стороннее решение – плагин Kama Click Counter .

Плагин Kama Click Counter

Бесплатный плагин Kama Click Counter предоставляет все необходимые средства для точного подсчета количества загрузок того или иного файла. Итак, во-первых, его нужно установить и активировать. Для примера выведем на странице записи ссылку на pdf -файл, для которого и будем считать количество скачиваний. Следует отметить, что файлы на сайт загружаются стандартными способами Медиабиблиотеки WordPress (Медиафайлы -> Добавить новый ). Дальше необходимо открыть на редактирование запись или страницу. В контентной части нужно поставить курсор в то место, где будет размещена ссылка на файл, и нажать появившеюся кнопку в панели инструментов визуального редактора.

Во всплывающем окне плагин попросит Вас выбрать загруженный ранее файл. Для этого нужно нажать кнопку с иконкой лупы.

В библиотеке медиафайлов следует выбрать нужный файл и нажать кнопку Выбрать файл .

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

После обновления материала (кнопка Обновить ) можно переходить на сайт для его просмотра.

Плагин также способен показать статистику загрузок и в пользовательской части сайта – в виджете. Отметим, что плагин по умолчанию не показывает в виджете конкретные цифры, что и сколько раз было скачано. Выводится лишь список наиболее часто загружаемых файлов. Для этого следует перейти в админ-раздел Внешний вид -> Виджеты и перетащить виджет КСС:Топ Загрузок в желаемое место сайдбара.

Видно, что в виджете доступно несколько опций, позволяющих видоизменить список.

Тут можно задать следующие основные параметры:

  • заголовок виджета (поле Заголовок );
  • количество выводимых файлов в списке (сколько ссылок показывать? );
  • сортировка результатов (как сортировать результат? );
  • настройка внешнего вида шаблона (блоки Шаблон и CSS шаблона ).

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

После того, как все настройки виджета были выполнены и сохранены (кнопка Сохранить ), можно смотреть результат на сайте.

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

У каждого файла будет запись в ряду таблицы базы данных. В этой же таблице будет сохраняться количество скачиваний файла. PHP будет обновлять БД MySQL и перенаправлять пользователя на необходимый файл.

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

Шаг 1 - XHTML

Первым шаг - это создание разметки нашего скрипта. Она очень простая - у нас есть div file-manager, который содержит неупорядоченный список, в котором каждый элемент списка отвечает за файл.

Файлы, скачивания которых необходимо отследить, помещены в папку files в корневой папке скрипта. PHP потом проходит по всем файлам и добавляет каждый в качестве элемента списка (li) в неупорядоченный список.

demo.php


  • photoShoot-1.0.zip 0 download

Обратите внимание, что атрибут href ссылок передает название файла в качестве параметра для download.php. именно здесь и происходит отслеживание количества скачиваний.

Вам необязательно отображать все таким же образом - Вы просто можете давать ссылки на download.php на Ваших страницах и все скачивания не пройдут мимо.

Шаг 2 - CSS

После разметки давайте займемся оформлением. CSS правила ниже обращаются к div file-manager с помощью id (символ #), так как он встречается только 1 раз на странице, и к остальным элементам по названиям классов.

styles.css

#file-manager{ background-color:#EEE; border:1px solid #DDD; margin:50px auto; padding:10px; width:400px; }
ul.manager li{ background:url("img/bg_gradient.gif") repeat-x center bottom #F5F5F5; border:1px solid #DDD; border-top-color:#FFF; list-style:none; position:relative; } ul.manager li a{ display:block; padding:8px; } ul.manager li a:hover .download-label{ /* При наведении на мпимок, показать зеленый текст скачать: */ display:block; } span.download-label{ background-color:#64B126; border:1px solid #4E9416; color:white; display:none; font-size:10px; padding:2px 4px; position:absolute; right:8px; text-decoration:none; text-shadow:0 0 1px #315D0D; top:6px; /* CSS3 Закругленные углы */
-moz-border-radius:3px; -webkit-border-radius:3px; border-radius:3px; } span.download-count{ color:#999; font-size:10px; padding:3px 5px; position:absolute; text-decoration:none; }

Шаг 3 - PHP

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

demo.php - верхняя часть

// Соо бщение об ошибках : error_reporting(E_ALL^E_NOTICE); // : require "connect.php"; $extension=""; $files_array = array(); /* Открываем папку и проходим по всем файлам : */ $dir_handle = @opendir($directory) or die("There is an error with your file directory!"); while ($file = readdir($dir_handle)) { /* Пропускаем системные файлы : */ if($file{0}==".") continue; /* end() выводит последний элемент массива сгенерированного функцией explode(): */ $extension = strtolower(end(explode(".",$file))); /* Пропускаем php файлы : */ if($extension == "php") continue; $files_array=$file; } /* Сортируем файлы в алфавитном порядке */ sort($files_array,SORT_STRING); $file_downloads=array(); $result = mysql_query("SELECT * FROM download_manager"); if(mysql_num_rows($result)) while($row=mysql_fetch_assoc($result)) { /* Ключ массива $file_downloads будет названием файла , и будет содержать кол-во скачиваний : */ $file_downloads[$row["filename"]]=$row["downloads"]; }

Обратите внимание как мы выбираем все ряды с таблицы download_manager с помощью mysql_query(), и позже добавляем их к массиву $file_downloads с названием файла в качестве ключа к количеству скачиваний. Таким образом, далее в коде, мы можем писать $file_downloads["archive.zip"] и выводить количество скачиваний.

Ниже Вы видите код, который генерирует элементы списка:

demo.php - средняя часть

Foreach($files_array as $key=>$val) { echo "

  • ".$val." ".(int)$file_downloads[$val]." download
  • "; }

    Все делается просто с помощью цикла foreach массива $files_array. После этого все выводится с помощью echo.

    Теперь давайте более детально взглянем на то, как происходит отслеживание файлов.

    download.php

    // Проверка ошибок : error_reporting(E_ALL^E_NOTICE); // Включаем файл подключения к ДБ : require("connect.php"); if(!$_GET["file"]) error("Missing parameter!"); if($_GET["file"]{0}==".") error("Wrong file!"); if(file_exists($directory."/".$_GET["file"])) { /* Есл и посетитель не поисковой бот , засчитываем скачивание : */ if(!is_bot()) mysql_query(" INSERT INTO download_manager SET filename="".mysql_real_escape_string($_GET["file"])."" ON DUPLICATE KEY UPDATE downloads=downloads+1"); header("Location: ".$directory."/".$_GET["file"]); exit; } else error("This file does not exist!"); /* функции помощники : */ function error($str) { die($str); } function is_bot() { /* Эта функция проверки на робота */ $botlist = array("Teoma", "alexa", "froogle", "Gigabot", "inktomi", "looksmart", "URL_Spider_SQL", "Firefly", "NationalDirectory", "Ask Jeeves", "TECNOSEEK", "InfoSeek", "WebFindBot", "girafabot", "crawler", "www.galaxy.com", "Googlebot", "Scooter", "Slurp", "msnbot", "appie", "FAST", "WebBug", "Spade", "ZyBorg", "rabaz", "Baiduspider", "Feedfetcher-Google", "TechnoratiSnoop", "Rankivabot", "Mediapartners-Google", "Sogou web spider", "WebAlta Crawler","TweetmemeBot", "Butterfly","Twitturls","Me.dium","Twiceler"); foreach($botlist as $bot) { if(strpos($_SERVER["HTTP_USER_AGENT"],$bot)!==false) return true; // Is a bot } return false; // Not a bot }

    Важно проверить является ли Ваш посетитель человек или роботом поисковиков. Роботы это конечно хорошо, но не позволим им искажать нашу статистику. Именно поэтому ряд в базе данных обновляется только после проверки is_bot().

    Шаг 4 - MySQL

    Как мы заметили в прошлом шаге, количество скачиваний сохраняется в качестве ряда в таблице download_manager. Для начала давайте объясним как работает этот запрос:

    download.php

    INSERT INTO download_manager SET filename="filename.doc" ON DUPLICATE KEY UPDATE downloads=downloads+1

    Он говорит MySQL вставить новый ряд в таблицу download_manager, и установить поле ряда filename на значение вызванного к скачиванию файла. Однако, поле filename обозначенного как уникальный индекс в таблице. Это означает, что каждый ряд можно вставлять только раз, иначе возникнет ошибка duplicate key error.

    Именно здесь и будет работать вторая часть запроса - ON DUPLICATE KEY UPDATE сообщит MySQL добавить единицу к колонке скачиваний, если файл уже существует в базе.

    Таким образом новые файлы будут автоматически добавляться в БД при первом скачивании.

    Шаг 5 - jQuery

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

    Мы это сделаем с помощью jQuery:

    script.js

    $(document).ready(function(){ /* Код выполняется после загрузки страницы */ $("ul.manager a").click(function(){ var countSpan = $(".download-count",this); countSpan.text(parseInt(countSpan.text())+1); }); });

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

    Шаг 6 - htaccess

    Есть еще одна вещь, которую необходимо сделать. Download.php редиректит пользователя к запрашиваемому файлу, который был передан в качестве параметра. Однако, Вы могли заметить, что некоторые типы файлов браузеры пытаются открыть напрямую. Нам же необходимо инициировать их загрузку. Это можно сделать с помощью нескольких строк внутри файла.htacess, который находится в папке files.

    ForceType application/octet-stream

    Вот теперь наш счетчик полностью готов!

    Заключение

    Для того, чтобы демо заработало у Вас необходимо воссоздать таблицу download_manager в базе данных MySQL. Вы можете найти необходимый SQL код в исходниках.

    После этого, добавьте Ваши данные для соединения с БД в файле configuration.php.

    // Удаляем преобразование режима "магических кавычек" $_POST["content"] = addslashes($_POST["content"]);

    // Перезаписываем содержимое файла file_put_contents($_POST["filename"], "$_POST");

    4.9. Счетчик загрузок файлов

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

    Будем строить наш счетчик таким образом, чтобы ссылки на загрузку файла представляли собой ссылки на текущую страницу с передачей в качестве параметра имени файла, например, index.php?down=archive.zip . Скрипт будет проверять, передан ли параметр down , и если это так, то будет регистрировать загрузку архива в файле filecount.txt. При повторной загрузке страницы из файла будут извлекаться значения счетчиков для каждого из архивов для вывода в окно браузера. Передача файла на загрузку будет осуществляться отсылкой посетителю HTTP-заголовка Location с указанием пути к загружаемому архиву. Скрипт счетчика загрузок файлов может выглядеть так, как это представлено в листинге 4.31.

    Листинг 4.31. Счетчик загрузок файлов

    // Выставляем уровень обработки ошибок error_reporting(E_ALL & ~E_NOTICE);

    // Регистрируем имена файлов в массиве

    $file_name = array("archive1.zip","archive2.zip","archive3.zip");

    // Имя файла, где хранится статистика $countname = "filecount.txt";

    // Если файл существует,

    // считываем текущую статистику в массив if(file_exists($countname))

    // Получаем содержимое счетчика

    $content = file_get_contents($countname);

    // Распаковываем массив

    $count = unserialize($content);

    // Если такого файла нет - создаем его,

    // а статистику обнуляем

    // Заполняем массив $count нулевыми значениями foreach($file_name as $file)

    $count[$file] = 0;

    // Упаковываем массив и помещаем его в счетчик file_put_contents($countname, serialize($count));

    // Проверяем, не передано ли значение параметра down

    // через метод GET

    if(isset($_GET["down"]))

    // Проверяем, входит ли значение параметра $_GET["down"]

    // в массив $file_name

    if(in_array($_GET["down"],$file_name))

    // Регистрируем факт загрузки данного файла

    // Увеличиваем значение счетчика с ключом

    // $_GET["down"] на единицу

    $count[$_GET["down"]]++;

    // Перезаписываем файл счетчика file_put_contents($countname, serialize($count));

    echo "Файл $file был загружен ".intval($count[$file])." раз
    ";

    Имена загружаемых файлов хранятся в массиве $file_name , добавление нового архива приводит к автоматическому его учету в системе. Предварительная регистрация в массиве необходима по нескольким причинам. Во-первых, принимая имя массива через параметр down , необходимо проверить, входит ли он в число файлов, разрешенных к загрузке. Во-вторых, обрабатывать имена файлов в массиве гораздо удобнее. Так массив $count , в котором хранится количество загрузок файлов, автоматически строится на основании массива зарегистрированных в системе файлов,

    массив удобно упаковывать при помощи функции serialize() в строку, а затем распаковывать обратно в массив при помощи функции unserialize() .

    З АМЕЧАНИЕ

    Важно помнить, что отправка всех HTTP-заголовков должна осуществляться до отправки основного содержимого, иначе их отправка будет невозможна и интерпретатор PHP выдаст предупреждение "Warning: Cannot modify header information - headers already sent by"

    (Предупреждение: невозможно модифицировать заголовочную информацию - заголовки уже отправлены). Это диктуется протоколом HTTP: сначала отправляются заголовки, затем содержимое документа, поэтому любой вывод в окно браузера воспринимается как окончание отправки заголовков и начало отправки тела документа. Если вывод в окно браузера до отправки заголовков неизбежен, необходимо прибегать к функциям управления выводом, помещая весь вывод в буфер и отправляя его в конце работы скрипта.

    Как видно из листинга 4.31, в скрипте обрабатывается ситуация первого запуска, когда отсутствует файл filecount.txt - он автоматически создается при первой загрузке страницы, инициированный нулевыми значениями для каждого файла из массива $file_name . Результат работы скрипта из листинга 4.31 можно видеть на рис. 4.4.

    Рис. 4.4. Результат работы счетчика файлов

    4.10. Сохранение текстовых и графических файлов

    Переход по ссылке на текстовые файлы или файлы HTML приводит к отображению их в окне браузера, что не всегда удобно, особенно, если файл предназначен для загрузки. Та же участь ожидает графические файлы и вообще любые файлы, которые браузер может отобразить. О содержимом файла браузер посетителя "узнает" от сервера, т. к. каждый файл сопровождается HTTP-заголовками, сообщающими клиенту о содержимом, размере загружаемого файла, необходимости установить cookie и т. п. Если тип файла не удалось определить, он отправляется просто как двоичный поток.

    Подавить такое поведение можно, отправив HTTP-заголовки, представленные в листинге 4.32.

    Листинг 4.32. Скрипт, позволяющий сохранять текстовые и графические файлы

    $filename = basename($_GET["down"]); header("Content-Disposition: attachment; filename=$filename"); header("Content-type: application/octet-stream"); header("Content-length: ".filesize($_GET["down"]));

    echo file_get_contents($_GET["down"]); ?>

    Скрипт в листинге 4.32 принимает в качестве GET-параметра имя файла, например,

    index.php?down=filetext.txt. При помощи функции basename() извлекается имя

    файла (на тот случай, если GET-параметр down содержит путь к файлу). HTTPзаголовок Content-Disposition задает имя сохраняемого файла, которое определяется атрибутом filename . В приведенном скрипте параметр filename совпадает с именем отправляемого файла, однако в качестве параметра filename может быть передано произвольное имя. HTTP-заголовок Content-type сообщает о том, что передаваемые данные являются двоичными, и браузеру их не следует интерпретировать. HTTP-заголовок Content-length передает клиенту размер файла. В последней строке выводится содержимое файла, переданное через параметр $_GET["down"] , которое извлекается при помощи функции file_get_contents() . Результат работы скрипта из листинга 4.32 представлен на рис. 4.5.

    З АМЕЧАНИЕ

    Важно, чтобы после вывода содержимого файла больше ничего не выводилось в поток: ни конструкцией echo , ни непосредственным выводом - иначе все будет прикреплено в конец файла. Это относится и к возможным пробелам, и к переводам строк после завершающего тега ?> .

    Рис. 4.5. Диалоговое окно для загрузки файла

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

    Введение.

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

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

    ABAP

    Скачать файл!

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

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

    Обзор

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

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

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

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

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

    Скажу сразу, он у меня тоже толком не заработал, поэтому читать о его установке и настройке можно лишь из академического интереса. По сути, это тот же плагин, только слегка видоизмененный. Слава богу, хоть инструкция не переведена — можно нормально прочитать, а не пытаться понять, что же имел ввиду переводчик. Кстати, в админке — представляется совсем другим плагином, предлагая обновиться (да фиг ему). Аналогично предыдущему плагину, его страница находилась , и точно также автор уже более 4 лет его не поддерживает. По аналогии создаем в директории плагинов для него еще одну папку, у меня — download-counter, забрасываем туда все файлы. Настройки выглядят, конечно, побогаче, хотя скорость скачивания ограничивается сразу для всех файлов, а не устанавливается для каждого своя. Где лежит файл download-manager..php (не забыть в конце название файла, а вот где все загрузки лежат — угадал с первого раза, чем поверг меня в жуткое изумление. Как потом оказалось, это я угадал с названием директории, в которую надо закладывать закачки, здесь моя логика отработала на 100% одинаково с автором плагина.

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

    Теперь пробуем вставить в пост. Добавляем ссылку, в ней меняем нашу ссылку на код, который выдается прямо в настройках плагина. И тут… А фиг вам! Ошибка HTTP 500 (Internal Server Error): При попытке сервера выполнить запрос возникла неожиданная ситуация. Ну вот, а я только собирался рассказать, как добавлять счетчик прямо в пост, что если к ссылке внутри , чтобы получилось

    ABAP

    & lt ; ahref= "http://chewriter..jpg" />

    то можно выводить кнопку скачивания — криво, правда. Вот вам и плагин, зря время потратил. Статистику он особо не ведет, потому где глюк — разбираться не будем.

    Это как раз тот плагин, на который предлагался обновится вышеуказанный Download Counter Advanced. Ну предлагает — и ладно, скачаем, посмотрим. Плагин тоже не обновлялся уже более 3 лет, и некоторые пользователи даже сами вносили исправления в его код. Устанавливается вполне успешно, аскетизм настроек оптимизма не вселяет. Кстати, тоже молодцы, догадались, куда настройки разместить — не хуже, чем в предыдущем случае. Добавляем счетчики на странице настройки, все вроде высвечивается, как и должно.

    Смотрим, что у нас с добавлением в пост. Ага, никаких кнопок нет. А, ну конечно, я забыл тут же все интуитивно понятно. Лезем в инструкцию. Необходимо городить сложную конструкцию, состоящую из шорткодов типа , скачан , и при этом (вероятно из-за чпу) толком он ничего и не считает.

    Поэтому дальнейшее его рассмотрение, вместе с идущим к нему плагином Download Counter Chart , выводящим информацию в графическом виде, проводить не будем.

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


    счетчик скачиваний для WordPress своими руками

    придется вводить ручками. Весьма хорошо, что автор подробно все расписал, не пришлось тестировать на себе.

    Ну если уж речь зашла о плагинах, написанных нашими людьми, то нельзя не упомянуть еще один. Его огромный плюс состоит в том, что он позволяет считать не только количество скачиваний файлов, но также и просто клики на ссылки — не важно, ведут ли они к какому-либо файлу, или просто на другую страницу. Или на файл на чужой странице 🙂 Это он тоже посчитает, ну вернее — теоретически должен посчитать. Со статистикой у него тоже все не ахти как, кнопочек на панели редактирования нет, ограничений по закачкам — тоже. Но посмотреть все же любопытно. Поэтому скачиваем, и устанавливаем. В принципе, достаточно подробное описание есть на сайте автора, поэтому особо распространятся не буду. Необходимо постоянно держать в голове, что если требуется установить счетчик на файл или на ссылку, то следует использовать либо шорткод типа, либо в ссылке вставить класс class=»count». Это, конечно, напрягает, с кнопочкой было бы гораздо удобнее. Но самое обидное, что после всех телодвижений я так и не смог добиться его адекватной работы — в случае, если использовался шорткод, то не выводилась сама ссылка на закачку, а в случае, если использовался класс — не появлялась в админке статистика по ссылкам. Скриншоты можно посмотреть у автора — если сама идея вам понравилась — пробуйте, может у вас получится.

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

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

    Среди настроек присутствуют следующие:

    • Можно указать директорию, из которой разрешено скачивать файлы
    • Можно указать типы файлов, которые разрешено скачивать
    • Запретить считать скачивание файла автором
    • Выставить в секундах интервал, в течение которого повторные нажатия на ссылку с одного и того же IP будут посчитаны только один раз
    • Ограничить число файлов, которые можно скачать с одного IP в день
    • Использовать какую-либо промежуточную страницу с информацией о том, что скачивание сейчас начнется

    Однако, все это работает, только если у вас либо (как бы это попроще-то сказать…) разрешено редактирование файла.htaccess, либо если вы указываете ссылку в прямом виде, вставляя в

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

    В смысле отображения информации, этот плагин весьма схож с рассмотренным в предыдущем пункте. Отличается тем, что позволяет посмотреть статистику отдельно понедельно, помесячно, за любой период и просто топ-10. По своим возможностям — он гораздо более убог, нет ни статистики по последнему скачиванию, ни по конкретному файлу, не говоря уже о возможности ввести ограничения на скачивание файлов. Внятная документация вообще отсутствует. У меня возникло впечатление, что это просто недоразумение какое-то, а не плагин. Скриншоты даже и приводить не хочется, но чтобы быть объективным — все-таки приведу, авторские.

    Ну вот мы и добрались до чего-то более-менее достойного. Почти пол-миллиона скачиваний — это о чем-то говорит. Официальная страница плагина находится . Для того, чтобы вставить файл в запись, необходимо воспользоваться стрелочкой над визуальным редактором (в нем самом иконки не появляется)

    И в появившемся окне выбрать необходимый файл (это пример, если он уже закачан по фтп)

    Затем, нажать на кнопку «Save new download»

    и, перейдя на следующий экран, выбрать формат скачивания, и нажать на Insert into post. Не исключено, что ничего не произойдет. Плагин слегка проглючивает с последними версиями вордпресс. Поэтому надо дополнительно нажать на ссылку View Downloads

    И уже тогда, выбрав сначала формат скачивания , нажать на ссылку Insert напротив именно того файла, который надо вставить.

    После чего в записи возникнет соответствующий шорткод типа

    ABAP

    [ downloadid = "7592" format="1"]

    Плагин требует тонкой ручной настройки, но никаких WYSIWYG-ов не предусмотрено. Хорошо, что нужно только один раз настраивать. Подробная документация находится на автора.

    Вот пример настройки:

    ABAP

    {title}

    & lt ; ahref= "{url}" title="Скачан {hits,"ни разу","1 раз","% раза"}">{title}

    Необходимо отметить, что склонения не поддерживаются, т.е. если файл скачали 21 раз, а у вас в шаблоне стоит «раза» — то звучать это будет несколько не по-русски.

    А вот вариант с кнопкой:

    ABAP

    - {description}, {size}, Загружен {date,"Y-m-d"}, Скачан {hits} раза

    & lt ; ahref= "{url}" title="Скачан {hits,"ни разу","1 раз","% раза"}"> - {description}, {size}, Загружен {date,"Y-m-d"}, Скачан {hits} раза

    Выглядит так:

    Ну а у меня после некоторой доработки стал выглядеть так (пока еще без кнопочек):

    Код строки:

    ABAP

    {filetype_icon} {title} (Размер файла: {size}, Загружен: {date,"d.m.Y"}, Скачан {hits} раза)
    {description}

    Список возможностей достаточно широк:

    • Можно закачивать файлы как с его помощью (при нажатии на стрелочку), так и указывать место, где они лежат, если были закачаны ранее по фтп, можно просто указать URL
    • Скрывает истинное местонахождение файла, можно подставить любую необходимую комбинацию URL
    • Можно использовать кнопку для скачивания, в том числе и свою
    • Не считаются скачивания админом, и всех ненужных IP, включенных в лист исключения счетчика
    • Считать ли повторные скачивания в течение определенного времени с одного и того же IP
    • Можно задать несколько форматов — с картинкой, со счетчиком, без счетчика, и т.д., и использовать каждый из них в соответствующей ситуации
    • Есть выгрузка лога скачиваний в виде csv файла

    В случае, если выкладывается какой-либо mp3 или видео файл — надо для них указать, force download, или нет. Если force — то по клику на него, он будет скачиваться, если галочку не ставить — воспроизводиться, тогда сохранение — правой кнопкой мыши. Хочу отметить то, что файлы, закаченные с его помощью кладутся не туда, где создана ваша спец-директория для файлов, а в создаваемую им wp-content/uploads/downloads/ — необходимо помнить об этом, как и о том, что при удалении их из статистики — удаляются и физически файлы с сервера. С теми, что закачаны по фтп — все ОК. Плюс, если вставить ссылку в разных постах на один и тот же файл — то я не разбирался, будет ли он их суммировать. К сожалению, не поддерживает никаких ограничений по скачиванию, кроме того, что можно запретить скачивание всем, кроме зарегистрированных пользователей. Когда хочется отображать в нижней строке браузера название файла, или необходимо поменять на его ID — необходимо не забыть зайти в параметры->постоянные ссылки, и сохранить там конфигурацию, чтобы все правильно прописалось в.htaccess — без этого файлы скачиваться не будут !

    Статистика выводится в сразу в трех местах — в консоли, в информации о файлах, и в логах скачивания. Это создает определенные неудобства, например, когда необходимо посмотреть, когда какой-либо файл был скачен последний раз, но можно выгружать статистику в виде csv файла, и потом разгребать уже в экселе. С учетом того, что эксель имеет дьявольские возможности по построению необходимых таблиц и диаграмм — то может, это и неплохо. Впрочем, думаю скриншоты скажут больше:

    Ну и скриншот непосредственно лога:

    При этом огромный плюс — в консоли появляется виджет со статистикой вот такого вот вида:

    В целом — можно сказать, что после небольшой настройки, плагин свое дело делает просто отлично.

    Этот плагин был написан тем же автором, что и плагин WP-Polls, который я, к примеру, использую на этом сайте. Хотя и пользуется, по сравнению с ним, на порядок меньшей популярностью. Но давайте смотреть, заслуженно ли. Всю документацию можно найти на сайте автора. По своей сути плагин абсолютно идентичен предыдущему — точно также прописывается темплэйт, отсутствуют ограничения на скачку, кроме зарегистрированных-незарегистрированных пользователей,точно также требуется использовать шорткод вида

    ABAP

    [ downloadid = "7592"]

    ну и по остальным пунктам:

    • Можно закачивать файлы как с его помощью (до двух Мб, ну или сколько там у вас указано в php.ini), так и указывать место, где они лежат, если были закачаны ранее по фтп, можно просто указать URL
    • Скрывает истинное местонахождение файла, но подставить любую необходимую комбинацию URL не представляется возможным, есть только несколько фиксированных вариантов, основной из которых у меня не заработал
    • Можно сконфигурировать таким образом, чтобы для посетителей выводилась информация о том, какой размер файла, сколько раз был скачан, когда загружен
    • Можно выводить иконку для соответствющих типов файлов
    • Можно сбрасывать счетчик, или задавать необходимое значение

    Однако, есть и некоторые отличия. Во-первых, отсутствует кнопка в визуальном редакторе, с помощью которой можно вставить шорткод. Вернее, кнопка-то есть, но для того, чтобы ей воспользоваться, необходимо сначала в настройках плагина добавить счетчик для файла, а потом уже этой кнопкой будет добавлен ID счетчика непосредственно в пост. Во-вторых, темплэйт только один, и выводить для разных файлов разную информацию не получится. Из плюсов статистики — показывает, когда последний раз был скачан файл, в остальном — только минусы — ни выгрузки в csv файл, ни просмотра того, кто скачал (отсутствуют IP), ни распределения по датам.

    Но вот иконки — посимпатичнее (я их потом приделал к предыдущему плагину). Результат его работы выглядит следующим образом:

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

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

    Но я бы сказал, что некоторые возможности данного плагина излишни, а нужных по статистике — не хватает. Очень много настроек, виджеты закачки, сложная система синхронизации, система вывода mp3 тегов, отображение flv файлов, организация мини-файлохранилища, вывод всех указанных на странице файлов в начале или конце поста, и т.д., и т.п.

    Скриншоты всех настроек даже и приводить не хочется.

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

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

    Считает — через пень-колоду (ну или больше одного скачивания с IP не считает, не знаю уж). Статистика убога чуть менее, чем полностью, весьма схожа с только что рассматривающимся выше плагином.

    В общем, у меня оставил впечатление — здоровый, да бестолковый. Годится под какое-нибудь файл-хранилище, да и то — если в совокупности с каким-либо другим плагином. Посмотрел я на него — да и снес.

    Откровенно говоря, когда я прочитал его описание, то подумал — что вот оно, то что мне надо!

    Счетчик, защита паролем, шорткод вставляемый кнопкой, редактируемая кнопка, и т.д.

    А выглядит вот так (привел сразу два используемых три шаблона):

    Однако, для того, чтобы добавить файл — во-первых необходимо добавить для него счетчик в плагинах. Во-вторых — статистика вообще практически отсутствует.

    В третьих — нельзя задать вывод отображения размера файла для пользователя. В четвертых — нет ограничения на скорость скачивания, есть только защита файла паролем. Редактировать шаблоны — нельзя. И большая надпись с предложением купить премиум-версию за 45 баксов. Ну, в общем, вы поняли. Всё вкусное — за бабки. Деактивировал, да снес. А красивые рамочки, кнопочки, и т.д. — я и сам в стилях пропишу, когда захочется.

    Резюме

    Установить стандартным образом (путем копирования в директорию wp-content/plugins/download-monitor/ , дать обновиться, заменить все иконки на иконки из архива в директории wp-content/plugins/download-monitor/img/filetype_icons/ и активировать.

    В дальнейшем, если руки дойдут, я думаю оформить ссылки в симпатичные рамочки с помощью css3, о чем скорее всего тоже напишу. Оставайтесь с нами 🙂

    Upd. Сейчас автор переработал плагин WordPress Download Monitor, и создал абсолютно отличающуюся от исходной версию. Я проверил ее, но мне она понравилась гораздо меньше по причине того, что темплэйт формы того, как будет выглядеть ссылка на скачивание, теперь так просто не редактируется. Автор решил, что достаточно будет готовых предустановленных видов. К примеру, если в меню downloads, дальше — settings выбираете нужный вид из шести предустановленных, нажимаете сохранить

    То при выборе второго варианта получаете что-то типа такого:

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

    Решил посмотреть сколько раз скачивают один из моих скриптов с сайта. Для этого решил написать счётчик скачиваний файлов для сайта. В интернете много реализаций данной задачи, но тем неменее ознакомтесь с моим решением.

    Логика работы счётчика скачивания довольна проста. Для его реализации будем использовать мой любимый ajax. Вешаем на кнопку при возникновении событи clik обращение через ajax к php файлу счётчика. В php происходит обработка ajax запроса и запись в текстовый файл цифры суммарного количества скачек. После удачной записи возвращается ответ с суммарным счётчиком скачиваний и происходит редирект пользователя на ссылку для скачки файла (файл скачивается). Вот такая вот простая логика Теперь начнём её реализовать. Заранее создадим скачиваемый файл test.zip . Сделаем код кнопки и покажем счётчик скачек.

    Скачать файл Количество скачек:

    Мы создали кнопку с id="btnSend" , выводить счётчик будем в span с id="countView" , в атрибуте data-download будем хранить ссылку на скачиваемый файл

    Теперь давайте прикрутим к кнопке обработчик клика. Здесь уже будем использовать js и jquery. Про то как реализовать clik силами jquery можно почитать . Но перед установкой обработчика клика мы будем ajax обращаться к файлу count.php, в котором будет заключена вся работа счётчика. Подробнее о передаче данных ajax можно почитать . Это нужно что бы вывести из файла куда пишет счётчик, количество уже сделанных закачек и вывести их в span с id="countView"

    /*получаем текущее кол-во закачек*/ $(document).ready(function(){ //запрещаем кещировать ajax запрос //иначе счётчик будет брехать $.ajaxSetup({cache: false}); var html; $.ajax({ //как будем передавать данные type: "GET", //куда передаём url: "count.php", //какие данные передаём data: {flag: 2}, //событие после получения ответа от count.php success: function(data){ html=data; //выводим текущее кол-во закачек $("#countView").html(html); } }); /*вешаем событие на кнопку скачать файл*/ var clickevent=false;//флаг проверки нажатия //обработчик клика $("#btnSend").click(function(){ if(!clickevent){ $.ajax({ //как будем передавать данные type: "GET", //куда передаём url: "count.php", //какие данные передаём data: {flag: 1}, //событие перед отправкой ajax beforeSend: function(){ //если кнопка была нажата то труе clickevent=true; }, //событие после получения ответа, //получаем данные в data success: function(data){ //после выполнения действий разрешаем опять //обрабатывать клик по кнопке clickevent=false; html=data; //выводим новый счётчик $("#countView").html(html); //получаем ссылку из data-download //редиректит по ссылке скачки, качаем файл window.location.href = $("#btnSend").data("download"); } }); } return false;//запрещаем обрабатывать событие при клике }); });

    Для предотвращения повторного ошибочного нажатия кнопки отправки я ввёл в скрипт флаг clickevent . Пока не вернётся ответ от count.php с обновившимися данными счётчика клик по кнопке будет запрещён. Я так думаю работа кода после клика по кнопке более менее ясна. После клика по кнопке скачать в файл count.php передаются данные, там они обрабатываются и возвращается обновлённые данные счётчика, происходит редирект на ссылку скачивания и соответственно сама закачка файла.

    Давайте теперь разберём сердце нашего скрипта, а именно файл count.php.

    Function clearInt ($date){ //приводим date к числу, не отрицательному return abs((int)$date); } if($_SERVER["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest") { //проверяем какой флаг пришёл if(clearInt($_GET["flag"]==1)) { //открываем файл для чтения $f=fopen("mycount.txt","a+"); //закрывает доступ к файлу из других программ flock($f,LOCK_EX); //получаем из файла значение счётчика $count=fread($f,100); //плюсуем счётчик @$count++; //затираем файл ftruncate($f,0); //пищем новое покакзание счётчика fwrite($f,$count); //закрываем файл fclose($f); //возвращаем значение echo $count; } if(clearInt($_GET["flag"]==2)) { $c=fopen("mycount.txt","a+"); flock($c,LOCK_EX); $festc=fread($c,100); fclose($c); //возвращаем значение echo $festc; } }

    Здесь я то же думаю всё просто. Если приходит флаг 1 то делаем перезапись счётчика. Если приходит флаг 2 то просто возвращаются данные о количестве закачек. Всё остальное я думаю понятно из комментариев в коде.

    Cчетчик скачиваний Joomla

    Решил прикрутить подобный счётчик на один из моих проектов на joomla. По идее нужно конечно написать либо отдельный модуль, либо интегрировать код в контроллер компонента com content, что бы данные счётчика писались не в файл, а в бд и для каждой статьи отдельно. Но на на такую разработку нет времени и я решил вопрос более просто. Счётчик мне был нужен для одной страницы. Я взял файл count.php и перенёс его в шаблон джумла, который на данный момент подключён (в корне сайта templates/ваш_шаблон). Не забываем вставить в самый верх count.php код defined("_JEXEC") or die; (это для джумла). Кнопку закачки вставляем в создаваемую нами страницу, а js код можно так же встроить в страницу, либо подключить отдельным файлом. У меня например отдельным файлом (он находится в папке js шаблона). В самом шаблоне в хедере происходит подключение через код

    
    Top