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