Введение: зачем уметь работать с файловой системой в PHP
Любой веб-разработчик рано или поздно сталкивается с необходимостью сохранять данные на сервере, загружать изображения, создавать временные файлы или читать конфигурации. PHP предоставляет мощный набор функций для работы с файловой системой, которые позволяют выполнять все эти задачи быстро и безопасно.
В этой статье мы разберём самые востребованные операции: чтение и запись файлов, создание и удаление директорий, проверку существования элементов, а также работу с путями. Все примеры написаны на PHP и готовы к использованию в ваших проектах.
Основные функции для работы с файлами
Начнём с базовых операций — открытия, чтения и записи файлов. PHP поддерживает несколько способов взаимодействия с файлами, и мы рассмотрим самые популярные из них.
Открытие и закрытие файла: fopen и fclose
Функция fopen() открывает файл и возвращает дескриптор для дальнейшей работы. Режимы открытия определяют, что вы можете делать с файлом: читать (r), записывать (w), дописывать (a) и т.д.
<?php
// Открываем файл для чтения
$file = fopen("data.txt", "r");
if ($file) {
// Работаем с файлом
fclose($file); // Обязательно закрываем
} else {
echo "Не удалось открыть файл";
}
?>
Чтение из файла: fread, fgets, file_get_contents
Для чтения содержимого можно использовать разные функции в зависимости от задачи:
fread()— читает указанное количество байт.fgets()— читает одну строку.file_get_contents()— самый простой способ прочитать весь файл целиком.
<?php
// Чтение всего файла
$content = file_get_contents("example.txt");
echo $content;
// Чтение построчно
$file = fopen("example.txt", "r");
while (($line = fgets($file)) !== false) {
echo $line . "<br>";
}
fclose($file);
?>
Запись в файл: fwrite и file_put_contents
Запись данных выполняется с помощью fwrite() (требует открытого дескриптора) или file_put_contents() (одна строка — и файл записан).
<?php
// Быстрая запись
file_put_contents("log.txt", "Новая запись\n", FILE_APPEND);
// Запись через fwrite
$file = fopen("config.ini", "w");
fwrite($file, "db_host=localhost\n");
fwrite($file, "db_user=root\n");
fclose($file);
?>
Работа с директориями
Создание, удаление и навигация по папкам — ещё одна важная часть работы с файловой системой в PHP.
Создание и удаление папок: mkdir и rmdir
Функция mkdir() создаёт новую директорию. Третий параметр recursive позволяет создать вложенные папки одной командой.
<?php
// Создаём одну папку
mkdir("uploads", 0777);
// Создаём вложенные папки (2025 → 03 → images)
mkdir("uploads/2025/03/images", 0777, true);
// Удаляем пустую папку
rmdir("uploads/temp");
?>
Проверка существования файлов и папок
Перед выполнением операций всегда полезно проверить, существует ли файл или директория. Для этого используются функции file_exists(), is_file() и is_dir().
<?php
$path = "data/config.php";
if (file_exists($path)) {
echo "Файл или папка существует";
}
if (is_file($path)) {
echo "Это файл";
}
if (is_dir("uploads")) {
echo "Это директория";
}
?>
Получение списка файлов в директории
Функция scandir() возвращает массив всех элементов в папке. А glob() позволяет фильтровать по маске (например, только изображения).
<?php
// Все файлы и папки
$items = scandir("uploads");
print_r($items);
// Только PHP-файлы
$phpFiles = glob("*.php");
foreach ($phpFiles as $file) {
echo $file . "\n";
}
?>
Практические примеры: загрузка файлов и логирование
Теперь применим полученные знания к реальным задачам. Рассмотрим два популярных сценария: загрузку файлов на сервер и запись логов.
Обработка загруженного файла
При загрузке файла через форму PHP автоматически сохраняет его во временную папку. Ваша задача — переместить его в нужное место с помощью move_uploaded_file().
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['avatar'])) {
$uploadDir = 'uploads/avatars/';
$filename = time() . '_' . basename($_FILES['avatar']['name']);
$targetPath = $uploadDir . $filename;
// Создаём папку, если её нет
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0777, true);
}
// Перемещаем файл
if (move_uploaded_file($_FILES['avatar']['tmp_name'], $targetPath)) {
echo "Файл загружен: " . $targetPath;
} else {
echo "Ошибка загрузки";
}
}
?>
Простое логирование действий
Логи помогают отслеживать ошибки и действия пользователей. В этом примере мы дописываем записи в конец файла.
<?php
function writeLog($message) {
$logFile = "app.log";
$timestamp = date("Y-m-d H:i:s");
$entry = "[{$timestamp}] {$message}\n";
file_put_contents($logFile, $entry, FILE_APPEND | LOCK_EX);
}
// Использование
writeLog("Пользователь вошёл в систему");
writeLog("Ошибка подключения к БД");
?>
Безопасность при работе с файловой системой
Работа с файлами в PHP требует внимания к безопасности. Вот несколько обязательных правил:
- Проверяйте тип файла