Чтение и запись файлов
Переменные живут, пока выполняется программа. Чтобы данные сохранились между запусками, их записывают в файл или в базу данных. С файлами в PHP работать просто: для основных действий хватает одной функции.
Запись в файл
Функция file_put_contents() принимает путь к файлу и текст. Если файла нет, он будет создан; если есть — заменён:
<?php
$file = sys_get_temp_dir() . '/notes.txt';
file_put_contents($file, 'Купить молоко');Программа ничего не выводит — она только создаёт файл. Функция sys_get_temp_dir() возвращает папку для временных файлов; в настоящем проекте здесь был бы путь к папке с данными.
Чтение файла
Функция file_get_contents() возвращает всё содержимое файла одной строкой:
<?php
$file = sys_get_temp_dir() . '/notes.txt';
file_put_contents($file, 'Купить молоко');
echo file_get_contents($file);Дозапись
Чтобы добавить текст в конец, а не заменить файл, передают флаг FILE_APPEND. Константа PHP_EOL — это перевод строки:
<?php
$file = sys_get_temp_dir() . '/notes.txt';
file_put_contents($file, 'Купить молоко' . PHP_EOL);
file_put_contents($file, 'Позвонить маме' . PHP_EOL, FILE_APPEND);
echo file_get_contents($file);Чтение по строкам
Функция file() возвращает массив строк файла. Флаг FILE_IGNORE_NEW_LINES убирает перевод строки в конце каждой:
<?php
$file = sys_get_temp_dir() . '/notes.txt';
file_put_contents($file, "Молоко\nХлеб\nСыр");
$lines = file($file, FILE_IGNORE_NEW_LINES);
foreach ($lines as $number => $line) {
echo $number + 1, '. ', $line, "\n";
}Проверка и удаление
file_exists() сообщает, существует ли файл, а unlink() удаляет его:
<?php
$file = sys_get_temp_dir() . '/notes.txt';
file_put_contents($file, 'Временные данные');
var_dump(file_exists($file)); // bool(true)
unlink($file);
var_dump(file_exists($file)); // bool(false)Частая ошибка
Если файла нет, file_get_contents() выдаёт предупреждение и возвращает false. Перед чтением проверяйте файл через file_exists().
Вторая ловушка — относительные пути: они отсчитываются от папки, из которой запущен скрипт, а она бывает разной. Надёжнее строить путь от константы __DIR__ — папки текущего файла: __DIR__ . '/data/notes.txt'.