Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Чтение и запись файлов

Переменные живут, пока выполняется программа. Чтобы данные сохранились между запусками, их записывают в файл или в базу данных. С файлами в 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'.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.