Приклад на роботу з текстовим файлом в PHP
Невеликий навчальний приклад, ілюструє основні дії з так званими "плоскими" (тобто, звичайними текстовими) файлами. Навіть не підключаючись до MySQL або іншого сервера баз даних, на PHP легко (і головне, швидко) можна писати цілком повноцінні програми.
Нехай наш приклад буде підтримувати найпростішу текстову "базу даних", в якій один рядок файлу є одним записом. Запис буде складатися з 2 величин - ім'я (тобто рядок) і якесь число, відокремлене прогалиною. Скрипт повинен перевіряти наявність файлу (і при необхідності створювати новий), не дозволяти подавати однакові записи, сортувати підтримуваний список в алфавітному порядку, вміти показати існуючий список і форму для введення нового запису.
Зазвичай подібні дії і потрібні в реальних додатках.
Спочатку визначимо ім'я файлу для наших даних, папка передбачається поточної:
Можливо, ми будемо виходити з скрипта в декількох місцях коду (наприклад, через помилки доступу до файлу), так що відразу напишемо функцію myexit. "Закриває" документ HTML і робить вихід. А ось "вхід" в скрипт буде точно один, так що друк відповідного заголовка документа HTML поставимо першим дією.
Перевіримо, що файл існує і доступний для запису, якщо немає - спробуємо створити порожній файл і перевіримо, що вийшло. При невдачі - виводимо повідомлення про помилку і виходимо з кодом завершення 1.
Отримаємо вміст файлу, розділимо його на окремі рядки методом explode (кожен запис буде в елементі масиву $ a), елементи масиву $ a. в свою чергу, розділимо по пропуску на імена (після другого виклику explode вони будуть міститися в $ fields [0]) і числа ($ fields [1]). Але нам потрібні поки тільки імена - щоб сформувати з них масив всіх імен $ fio. Адже ми потім будемо перевіряти ім'я на повторне додавання.
Перевіримо і отримаємо 2 зовнішніх параметра - ім'я $ name і число $ number. З імені ми просто видалили теги функцією htmlspecialchars. а число перетворили методом intval. щоб видалити небажані символи.
Якщо обидві переданих величини непорожньої, спробуємо їх в файл - але спочатку перевіримо, що такого імені ще немає (array_search). Перед додаванням сортуємо масив даних функцією sort і об'єднуємо його в рядок функцією implode. окремі записи знову поділяємо перекладом рядка. Звичайно, такий підхід небажаний для великих обсягів даних, в цьому випадку краще застосовувати бази даних.
Виводимо форму для внесення нових даних, її поля, природно, називаються name і number. якщо відповідні змінні були передані - вони виводяться як початкове вміст полів. Звичайно, непогано було б, якби при збігу поля імені і розбіжності числа скрипт вмів ще оновлювати дані в файлі - спробуйте "прикрутити" відповідний код.
Залишається вивести рядок $ data і завершити скрипт. Якби нам знадобилася друк з поділом даними - ми б просканували змінений масив $ a циклом foreach.
Нижче прикріплений архів ZIP з файлом цього прикладу. Передбачається, що файл скрипта називається index.php. тобто, є "файлом за умовчанням" для своєї папки.