05. Работа с файлами

Зачем нужна работа с файлами

Иногда нужно сохранить данные, даже если пользователь закрыл страницу: записи, комментарии, настройки. Для этого можно использовать файлы.

PHP позволяет легко создавать, читать и изменять файлы прямо на сервере.

Файл — это как мини-база данных. Если БД нет, но нужно хранить текст или изображения — файл справится отлично!

Создание и запись в файл

Самый простой способ записать данные — функция file_put_contents().

file_put_contents('data.txt', 'Привет, файл!');

📁 В папке с сайтом появится файл data.txt, в котором будет текст «Привет, файл!». Если файла не было — PHP создаст его.

Добавление текста в конец файла


file_put_contents('data.txt', "\nНовая строка", FILE_APPEND);
Ключ FILE_APPEND говорит PHP «не перезаписывай, а допиши в конец».

Чтение данных из файла

Чтобы прочитать содержимое, используется file_get_contents().

$content = file_get_contents('data.txt');
echo nl2br($content); // nl2br делает переносы строк видимыми в HTML

Построчное чтение

Если файл большой, можно читать его по строкам:

$lines = file('data.txt');
foreach ($lines as $line) {
  echo htmlspecialchars($line).'<br>';
}

Удаление файлов


if (file_exists('data.txt')) {
  unlink('data.txt');
  echo 'Файл удалён!';
}

Проверка существования и прав доступа


if (file_exists('data.txt')) echo 'Файл найден!';
if (is_readable('data.txt')) echo 'Файл можно читать';
if (is_writable('data.txt')) echo 'Файл доступен для записи';

Практика: мини-гостевая книга

Попробуем создать простое приложение, где пользователи оставляют сообщения, а PHP сохраняет их в файл.

<?php
$file = 'guestbook.txt';

if ($_SERVER['REQUEST_METHOD'] === 'POST') { $name = htmlspecialchars($_POST['name']); $msg = htmlspecialchars($_POST['message']);

$entry = date('d.m.Y H:i') . ' — ' . $name . ': ' . $msg . "\n"; file_put_contents($file, $entry, FILE_APPEND); }

$messages = file_exists($file) ? file_get_contents($file) : ''; ?>

<form method='post'> <input name='name' placeholder='Имя'><br> <textarea name='message' placeholder='Сообщение'></textarea><br> <button>Отправить</button> </form>

<h3>Сообщения:[/h3] <pre><?= htmlspecialchars($messages) ?></pre>

Загрузка файлов

Теперь добавим возможность загружать изображения.

<form method='post' enctype='multipart/form-data'>
  <input type='file' name='photo'>
  <button>Загрузить</button>
</form>

<?php if (isset($_FILES['photo'])) { $file = $_FILES['photo']; $target = 'uploads/' . basename($file['name']);

if (!file_exists('uploads')) mkdir('uploads'); // создаём папку, если нет

if (move_uploaded_file($file['tmp_name'], $target)) { echo 'Файл успешно загружен!'; } else { echo 'Ошибка при загрузке файла!'; } } ?>

Проверка типа файла

Важно убедиться, что загружаются только изображения.

$type = mime_content_type($_FILES['photo']['tmp_name']);
if (in_array($type, ['image/jpeg', 'image/png', 'image/gif'])) {
  // файл допустим
} else {
  echo 'Можно загружать только изображения!';
}

Проверка размера файла


if ($_FILES['photo']['size'] > 2 * 1024 * 1024) {
  echo 'Файл слишком большой (максимум 2 МБ).';
}

Безопасность загрузки файлов

  • Проверяйте MIME-тип и расширение файла.
  • Храните загруженные файлы в отдельной папке, недоступной для выполнения PHP.
  • Переименовывайте файлы перед сохранением (чтобы избежать пересечения имен).

Пример безопасного имени


$ext = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
$newName = uniqid('img_', true) . '.' . $ext;
move_uploaded_file($_FILES['photo']['tmp_name'], 'uploads/'.$newName);

Типичные ошибки новичков

  • Не проверяют, загружен ли файл — PHP выдаёт ошибки.
  • Не ставят enctype='multipart/form-data' в форме.
  • Не проверяют размер и тип файла — в систему можно загрузить что угодно.
  • Перезаписывают существующий файл без предупреждения.

Практические задания

  • Создай форму для отправки сообщений, сохраняй каждое сообщение в новый файл (например, msg_1.txt, msg_2.txt).
  • Сделай загрузчик изображений с проверкой формата (только PNG, JPG).
  • Выведи список всех загруженных файлов из папки uploads с их размерами.

Итоги урока

Теперь вы умеете:
  • Создавать, читать и удалять файлы с помощью PHP.
  • Реализовывать формы для загрузки изображений.
  • Проверять тип и размер файлов.
  • Повышать безопасность при работе с файлами.