Як дізнатися скільки разів скачали ваш файл, php

Як дізнатися скільки разів скачали ваш файл?

З того моменту, як тільки буде створено ваш сайт, найпершим і очевидним бажанням буде дізнатися, наскільки він популярний. Існують різні можливості, які можуть вирішити цю проблему. Зазвичай сервер, який надає вам хостинг, дає дуже мізерну статистику. У цю статистику входить тільки кількість звернень на сайт і кількість переданої інформації. Але погодьтеся, що цього зовсім навіть недостатньо. Файлів на сайті дуже багато і хотілося б мати уявлення про те, що ж там у нас скачують.

Дуже важливо розуміти, як саме працює лічильник, а вже потім можна приступати до написання коду.

Насамперед потрібно визначитися з його структурою: з яких файлів він буде складатися і як все буде взаємодіяти. Для наочності я хочу навести такий малюнок.

У нас є який-небудь сайт www.сайт.ru. Припустимо, що на цьому сайті потрібно підраховувати скільки разів скачують деякі книги. Посилання на книги знаходиться в файлі book.php. Для зручності створюємо окрему директорію Counters, в якій буде сам лічильник (counter.php) і текстові документи, в яких будуть зберігатися дані, скільки разів скачали відповідну книгу (book1.txt і book2.txt). Ви запитаєте, а чому б не використати для зберігання числа завантажень базу даних? Звичайно, book.txt можна замінити базою даної, але для цього потрібне спеціальне програмне забезпечення. До того ж текстові файли використовувати набагато простіше, ніж базу даних. А я розраховую свою статтю в першу чергу на новачків. Безсумнівно, що на великому сайті використання бази даних є необхідністю. Без неї там ніяк не обійтися. Просто кількість текстових файлів досягне такої кількості, що управлятися з ними стане практично неможливим. Але це вже тема іншої статті.

У підсумку, як результат, коли ми відкриваємо файл book.php, то повинні бачити приблизно наступне:

Тепер спробуємо описати, як це цикл працює в цілому. Спочатку завантажується сторінка з адресою нашої і написом - «Кількість скачувань: 25». Щоб взяти число 25 потрібно звернутися до файлу, де воно зберігатися (book.txt). Як тільки користувач натискає на посилання, запускається програма (counter.php), яка збільшує змінну на 1 і записує її в текстовий файл. І так кожен раз.

Як бачите теоретично все дуже просто. Але основні проблеми виникають на практиці.

Отже, давайте перейдемо до технічної сторони питання. Почнемо безпосередньо з самого лічильника (counter.php). Ось код, який необхідно в нього вставити.

Ну, як, складно? Давайте розбиратися разом.

Для початку визначимося з конструкцією коду. Як ви знаєте, щоб використовувати РНР, потрібно створити таку конструкцію:

Тим самим ми даємо програмі зрозуміти, що використовуємо РНР.

Так як викачуються кілька файлів, щоб визначити на яку саме посилання натиснув користувач, використовується конструкція:

і т.д. Таким чином, відбір здійснюється за допомогою змінної $ book. Єдине, яким чином зробити так, щоб при натисканні на певну посилання, присвоювалась відповідна змінна?

Коли ви хочете перейти на певний сайт, потрібно набрати його URL.

Але насправді URL може мати довший вид. Чи бачили ви такий запис:

Цими параметрами можуть бути змінні.

Вказуючи, так змінні, вони будуть передаватися в файл, що відкривається. У разі, якщо потрібно оголосити відразу кілька змінних, робиться це через знак «».

Таким чином, коли користувач відкриває дану сторінку, змінні присвоюються автоматично, що дуже зручно. Такий метод передачі змінних в сценарій називається методом GET.

Ось і вся конструкція тепер можна переходити до коду самого лічильника.

Як вже говорилося вище, для того, щоб зберігати змінну кількості завантажень, використовується текстовий файл. Власне вся задача лічильника полягає в тому, щоб відкрити цей файл, дізнатися, яке значення зараз у лічильника, збільшити це значення на 1 і закрити файл. От і все!

У РНР, для роботи з текстовими файлами, обов'язково виконувати наступні етапи:

2) Витягти дані з файлу і при необхідності їх змінити

Спеціальна функція для відкриття файлу: $ змінна = fopen ( "ім'я файлу", "режим");

При відкритті файлу потрібно вказати режим, який буде дозволяти виконувати з файлом певні дії після його відкриття. Режими, які можна встановлювати наведені в наступній таблиці:

режим
Що буде, якщо файл існує
Що буде, якщо файлу не існує

r
тільки читання
Виникне попередження

r +
Читання і запис
Виникне попередження

w
тільки запис
Буде створено новий файл. Якщо файл існує, новий файл буде записаний поверх старого

w +
Читання і запис
Буде створено новий файл. Якщо файл існує, новий файл буде записаний поверх старого

a
Додавання даних в кінець файлу
Буде створено новий файл.

a +
Читання і додавання даних в кінець файлу
Буде створено новий файл.

Таким чином, ми відкриваємо файл book.txt для читання і зміни його значення. Створюється спеціальна змінна $ file, в якій буде зберігатися відкритий файл.

- flock ($ file, LOCK_EX) ;. Дуже важливий елемент. Він блокує доступ до файлу, на час роботи скрипта. Уявіть собі, що на посилання одночасно натиснули відразу ж дві людини. Так як скрипт відкриває файл для запису, то може відбутися збій і лічильник просто обнулитися.

- $ Count = fread ($ file, 100); Далі зчитуємо інформацію з відкритого файлу $ file і присвоюємо їй змінну $ count.

- $ Count ++; - збільшуємо значення на 1. Ця запис еквівалентна наступній ($ count = $ count + 1).

- ftruncate ($ file, 0); - за допомогою цієї команди вміст файлу (book.txt) очищається. І тепер можна буде вільно записувати туди нову інформацію. Саме на цьому моменті може відбутися збій при запуску одночасно двох скриптів. Про це я говорив вище. Але нам вже нічого не страшно, файл блокований.

- fwrite ($ file, $ count) ;. Записуємо нове значення лічильника.

- flock ($ file, LOCK_UN) ;. Тепер файл можна розблокувати і

Коли все написано, не забудьте встановити атрибути (права) на текстові файли (txt). Зробити це можна через FTP-клієнт. Змінюємо атрибути файлу на 666 (rw-rw-rw).

Ну от і все. Я намагався якомога зрозуміліше і просто пояснити вам процес установки лічильника скачування. Проте, якщо у вас, що-небудь не виходить, пишіть мені, і ми постараємося вирішити проблему разом.

З повагою, Ченгаев Дмитро

Схожі статті