Работа с файловой системой в PHP: практическое руководство

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: зачем уметь работать с файловой системой в 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 требует внимания к безопасности. Вот несколько обязательных правил:

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

Блоги

Рекомендаций по книгам