Sibprompost.ru

Стройка и ремонт
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Создаем счетчик загрузок файла с помощью PHP и MySQL

Создаем счетчик загрузок файла с помощью PHP и MySQL

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

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

Шаг 1 – XHTML

Для начала нам понадобится XHTML-разметка. Она очень простая – это общий блок file-manager, содержащий маркированный список, в котором ссылка на каждый файл будет находится внутри элемента li.

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

demo.php

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

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

Шаг 2 – CSS

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

style.css

Обратите внимание, что здесь подпись “download” скрыта по умолчанию, с помощью свойства display: none. Она отображается через display:block, только при наведении мыши на ссылку, без использования JavaScript. Немного CSS3 используется для закругления уголков у подписи.

Шаг 3 – PHP

Как мы уже говорили выше, PHP проходит циклом по всей папке files, и выводит каждый файл в виде элемента li маркированного списка. Давайте рассмотрим подробнее, как это происходит.

demo.php — Верхняя часть

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

Ниже представлен код, который используется для генерации элементов li маркированного списка.

demo.php – Центральная часть

Все очень просто – проходим циклом foreach по массиву $files_array, и выводим на страницу нужные данные в соответствующей разметке.

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

download.php

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

Шаг 4 – MySQL

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

Читайте так же:
Счетчики по воде беттер

download.php

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

Именно в этом случае, вступает в силу вторая часть запроса — ON DUPLICATE KEY UPDATE, которая увеличивает значение поля downloads на единицу, если этот файл уже записан в базе данных.

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

Шаг 5 – jQuery

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

Это можно исправить небольшим фрагментом кода:

script.js

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

Шаг 6 – htaccess

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

Вот и все, наш счетчик загрузок готов.

Заключение

Чтобы запустить этот пример на своем собственном сервере, вам понадобится создать таблицу download_manager в базе данных MySQL, к которой у вас разумеется есть доступ. В архиве с примером, есть файл table.sql, который содержит необходимый SQL-код, который создаст нужную таблицу.

После этого, просто укажите свои данные подключения к базе, в файле configuration.php.

Перевод статьи “PHP & MySQL File Download Counter”, автор Martin Angelov

Счетчик скачиваний файла на PHP & MySQL

В этой статье мы узнаем, как написать счетчик скачивания файла самому. Мы напишем простой, в то же время красивый и удобный счетчик на PHP и MySQL. Для красоты будем использовать jQuery. Но базовый скрипт счетчика скачиваний файла написан на PHP, с использованием БД MySQL. Каждый файл будет иметь отдельную строку записи в БД, где будет храниться общее количество скачиваний файла. PHP скрипт, будет обновлять данные в MySQL, и перенаправлять пользователей на соответственный файл. Для подсчета количества скачивания файла, вам необходимо загрузить файл в специальную папку, и использовать специальный URL для доступа к нему.

ШАГ 1 – XHTML

Первым шагом будет создать XHTML разметку списка файлов со счетчиками. Здесь все просто – у нас есть файл менеджер (div), который содержит неупорядоченный лист (ul), в котором каждый файл это li элемент.

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

demo.php

Заметьте, что href атрибут ссылки – передает имя файла как параметр к файлу download.php. Здесь мы и будем считать количество скачек файла. Скоро вы это увидите.

Читайте так же:
Счетчики прямого непрямого включения

Не ограничивайтесь этим интерфейсом при создании трекера файлов . Дизайн может быть любой, вам главное передать параметр к файлу download.php. Вы можете просто создать ссылку, с таким же href атрибутом, и все количество загрузок будет сохраняться в БД так же само.

ШАГ 2 – CSS

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

styles.css

Интересная часть кода, это зеленый лейбл, который по умолчанию display:none. Он показывается с помощью display:block, когда мы наведем на родительский , элемент. Этот элемент показывается без использования JavaScript. Немножко использован CSS3 код, который делает круглые уголки у зеленого лейбла.

ШАГ 3 – PHP

Немного ранее, мы говорили о том, что PHP будет проходить через папку files, и выводить каждый файл как li элементт. Теперь давайте посмотрим как это работает.

demo.php – Верхняя часть кода

Заметьте, как мы выбираем все записи из таблицы download_manager, с помощью mysql_query(). После чего, мы добавляем их в массив $file_downloads, в котором имя файла это ключ, а количество скачек это значение. Далее мы можем получить доступ к числу скачек с помощью строки – $file_downloads[‘archive.zip’].

Теперь рассмотрим код, который мы будем использовать для генерации li элементов.

demo.php – конец

Здесь все просто, мы используем цикл foreach для прохождения по массиву $files_array, и выводим его содержимое на экран.

Рассмотрим, как устроен файл подсчета скачек файлов.

download.php

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

ШАГ 4 – MySQL

В предыдущих шагах, мы говорили, что все данные будут сохраняться в БД, в таблице download_manager. Теперь, посмотрим, с помощью которого запроса мы будем обновлять данные:

Этот код заставляет MySQL вставить новую строку в таблицу download_manager, и изменить значение поля filename на имя файла. В случае повтора имени файла мы просто обновим значение поля downloads на +1. Поэтому все новые файлы будут добавляться автоматически в базу данных, если их скачают.

Ниже, предоставлена структура таблицы download_manager:

ШАГ 5 – jQuery

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

Мы сделаем это с помощью маленького кусочка кода jQuery:

Мы установили обработчик событий нажатия на ссылку. При каждом нажатии, мы просто добавляем +1 к значению в span теге.

ШАГ 6 – htaccess

Еще одна немаловажная вещь, которую нужно сделать. Так как ссылка на файл, это параметр. Нам нужно прописать несколько строк в htaccess, чтобы происходило перенаправление на скачивание файла. Этот .htaccess файл, должен находиться в папке files:

Читайте так же:
Счетчики посещений для сайта wordpress

На этом, написание счетчика скачивания файлов закончено!

PHP статический счетчик?

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

4 ответа

  • PHP-Простой Счетчик Попаданий

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

У меня проблема со счетчиком. Мне нужно посчитать две переменные, разделенные символом | , но иногда счетчик не увеличивает значение переменной. numeri.txt (счетчик): 6122|742610 Это сценарий PHP: $filename=numeri.txt; while(!$fp=fopen($filename,’c+’)) < usleep(100000); >.

Я бы рекомендовал использовать функцию автоматического приращения MySQL.

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

Вы не можете сделать это с помощью статических переменных. Переменная потеряет свое значение, если сценарии завершатся. Вы можете сохранить свою информацию в любом типе хранилища (MySQL, текстовый файл, xml . ).

Как насчет того, чтобы прочитать ID последней добавленной строки и просто увеличить ее на единицу? PHP не так строго относится к типам данных, поэтому довольно легко сделать что-то вроде

Если вы еще не взаимодействуете с базой данных, лучшим ответом для вас может быть SQLite. (SQLite-это доступная база данных SQL, хранящаяся в плоском файле, позволяющая выполнять основные функции базы данных без необходимости постоянного сервера. Доступ к нему осуществляется в PHP с помощью PDO. http://us3.php.net/manual/en/ref.pdo-sqlite.php )

В противном случае чтение файла, вероятно, является самым простым способом. Есть экспоненциально более умный и эффективный способ сделать это с помощью fseek, но мне еще слишком рано это понимать.

Похожие вопросы:

Я искал, существует ли что-то вроде статического инициализатора в PHP. Вот статический метод в качестве примера Java: public class Foo < static < //This is what I mean (Does this exist in other.

У меня есть класс template Singleton, который я использую для определенного количества важных компонентов моего кода. Использование кодовой модели Singleton не является целью этого вопроса. Теперь я.

Я полный новичок PHP и пытаюсь написать то, что мне кажется довольно простым сценарием. Это код, который у меня есть до сих пор: HTML / PHP group(‘inhalt’) as $i =>.

Я вызываю метод, и мне нужен статический счетчик внутри этого метода. Он необходим для разбора элементов списка. Счетчик покажет, В какой позиции списка искать. Например, static_var_with_position =.

Мне нужен простой счетчик в php, и я знаю, в чем проблема, каждый раз, когда я запускаю функцию, $counter снова прыгает в 0. Я не знаю, как это решить. if(empty($_POST[message-to-send]))<.

Как сделать счетчик для php файла

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

Читайте так же:
Sharp 5516 сброс счетчиков

Графические кнопки-счетчики предлагают многие бесплатные сервисы, самые известные из которых — Rambler, Mail.Ru, SpyLog. Но сегодня мы попробуем написать подобный счетчик сами — двигаясь в направлении от простого к сложному.

Часть I

Простой текстовый счетчик

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

  1. Прочитать текущее содержимое счетчика;
  2. Увеличить текущее содержимое счетчика на единицу;
  3. Сохранить обновленное содержимое счетчика;
  4. Вывести на печать обновленное значение счетчика.

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

Я сразу приведу PHP-код, реализующий самый простой из всех возможных типов счетчика, а затем уже дам ряд комментариев.

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

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

Для работы с файлами в PHP, как и во многих других языках программирования, предварительно необходимо открыть файл на чтение или запись. Для открытия файла используется функция fopen(), в качестве передаваемых ей параметров мы должны указать путь к файлу и способ доступа («r» — для чтения, «w» — для записи). В случае успешного открытия файла мы получаем его дескриптор, который далее и используется при любых операциях с файлом.

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

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

Прочитав значение счетчика, его необходимо увеличить на единицу и сохранить обновленное значение в файле. При сохранении файла, точно так же, как и при открытии, необходимо вначале получить дескриптор файла, а уже затем делать с файлом какие-либо операции. В отличие от чтения, нам сейчас необходимо открыть файл на запись, указав режим доступа «w». При открытии файла в режиме записи он автоматически усекается до нулевой длины. Для сохранения строки в файле мы используем функцию fwrite(), передавая ей дескриптор файла и собственно значение переменной $counter в качестве параметров.

Файл может отсутствовать при первом запуске скрипта, и в этом случае он будет создан автоматически — при первом же сохранении счетчика.

Счётчик обращений к файлам

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

Итак, у нас есть, допустим, файл price.xls, в котором мы содержим прайс-лист на наши услуги. Ссылка на этот файл находится на нашем сайте, и мы хотим при каждом обращении к этому файлу, вызывать скрипт, который будет вести лог обращений к файлу price.xls.

Первое, что приходит в голову — это сделать какой-нибудь файл price.php, где добавить информацию в лог, а затем отдать файл price.xls, отправив предварительно определённый заголовок. Это всё верно, но заменять ссылки не хочется, поэтому есть вариант и более интересный, а именно через mod_rewrite.

Чтобы сделать счётчик обращений к файлу, надо написать вот такой код:

RewriteEngine on
RewriteRule ^price.xls$ /log.php

Теперь привожу код log.php:

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

Вот таким образом делается счётчик обращений к различным файлам. Фактически, мы могли бы поставить ссылку на log.php, вместо price.xls, однако, если таких ссылок было бы много на сайте, то пришлось бы повозиться. Плюс благодаря mod_rewrite мы можем обработать не только ссылку на price.xls, но и сразу огромное количество других ссылок, написав только соответствующие строчки в .htaccess.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 1 ):

    Михаил, напишите пожалуйста статью про функцию rand() в PHP.

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.

    голоса
    Рейтинг статьи
    Ссылка на основную публикацию
    Adblock
    detector