Почнемо зі створення самого простого текстового лічильника, який буде обраховувати тільки одну сторінку - ту, на якій він буде розміщений. Але перед тим як переходити безпосередньо до програмування, давайте зупинимося на його алгоритмі. В даному випадку він дуже простий, але, сформулювавши його словами, нам буде простіше зрозуміти, як працює код. Отже, алгоритм роботи лічильника буде наступний:
- Прочитати поточний зміст лічильника;
- Збільшити поточний зміст лічильника на одиницю;
- Зберегти оновлений вміст лічильника;
- Вивести на друк оновлене значення лічильника.
Тепер важливе питання - де ми будемо зберігати значення лічильника? Оскільки сторінка запитується різними людьми і з різних комп'ютерів, то зберігати його ми можемо тільки на сервері. Як сховище може виступати або файл, або база даних. Роботу з базою даних ми зараз розбирати не будемо, а зупинимося на звичайному текстовому файлі, як найбільш підходящому варіанті в багатьох випадках.
Як бачите, скрипт досить прозорий і практично повністю слід сформульованому раніше алгоритму. При цьому, для зручності подальшої підтримки коду, я в першому ж рядку визначив змінну $ file_counter. яку вже і використовую. Постарайтеся, по можливості, завжди визначати змінні для всіх більш-менш важливих вихідних даних і не використовуйте їх безпосередньо.
Для роботи з файлами в PHP, як і в багатьох інших мовах програмування, попередньо необхідно відкрити файл на читання або запис. Для відкриття файлу використовується функція fopen (). в якості переданих їй параметрів ми повинні вказати шлях до файлу і спосіб доступу ( "r" - для читання, "w" - для запису). У разі успішного відкриття файлу ми отримуємо його дескриптор, який далі і використовується при будь-яких операціях з файлом.
На наступному кроці, використовуючи функцію fread (). ми читаємо вміст файлу. Оскільки у нас це дуже простий лічильник, то весь вміст файлу і є значенням лічильника. Але для того щоб прочитати вміст файлу, нам необхідно, крім дескриптора файлу, також вказати і розмір читаються даних. У разі якщо файл невеликий, найпростіше прочитати його в змінну цілком. А значить, нам необхідно попередньо дізнатися розмір файлу в байтах. Це робиться за допомогою функції filesize ().
Після того як ми закінчили працювати з файлом, його необхідно закрити, щоб звільнити ресурси операційної системи. Для закриття файлу досить викликати функцію fclose (). вказавши дескриптор файлу в якості параметра. Після того як файл буде закритий, дескриптор стає невизначеним і його більше використовувати не можна.
Прочитавши значення лічильника, його необхідно збільшити на одиницю і зберегти оновлене значення в файлі. При збереженні файлу, точно так же, як і при відкритті, необхідно спочатку отримати дескриптор файлу, а вже потім робити з файлом будь-які операції. На відміну від читання, нам зараз необхідно відкрити файл на запис, вказавши режим доступу "w". При відкритті файлу в режимі запису він автоматично буде скорочуватися до нульової довжини. Для збереження рядка в файлі ми використовуємо функцію fwrite (). передаючи їй дескриптор файлу і власне значення змінної $ counter в якості параметрів.
Файл може бути відсутнім при першому запуску скрипта, і в цьому випадку він буде створений автоматично - при першому ж збереженні лічильника.