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

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

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

Начать курс

Введение: зачем PHP умеет работать с файлами?

Любой веб-проект рано или поздно сталкивается с необходимостью сохранять данные на сервере. Будь то загрузка аватара пользователя, создание логов ошибок или генерация отчётов — всё это требует умения управлять файлами и папками. PHP предоставляет мощный набор функций для работы с файловой системой, и освоить их не так сложно, как кажется.

В этой статье мы разберём основные операции: создание, чтение, запись, удаление файлов и директорий, а также проверку прав доступа. Все примеры написаны на чистом PHP и готовы к использованию в ваших проектах.

1. Основы: открытие, чтение и запись файлов

Прежде чем что-то делать с файлом, его нужно открыть. Для этого в PHP используется функция fopen(). Она возвращает ресурс (указатель на файл), с которым затем можно работать.

Режимы открытия файлов

Второй параметр fopen() — режим доступа. Вот самые популярные:

  • 'r' — только чтение, указатель в начале файла.
  • 'w' — запись (создаёт файл или очищает существующий).
  • 'a' — добавление в конец файла (создаёт, если нет).
  • 'x' — создание и запись; если файл уже существует — ошибка.

Пример: запись текста в файл

<?php
$filename = 'test.txt';
$file = fopen($filename, 'w') or die('Не удалось открыть файл');
$text = "Привет, мир!\n";
fwrite($file, $text);
fclose($file);
echo 'Файл успешно записан';
?>

После записи обязательно закрывайте файл функцией fclose() — это освобождает системные ресурсы.

Чтение файла построчно

<?php
$file = fopen('test.txt', 'r');
while (!feof($file)) {
    $line = fgets($file);
    echo $line . '<br>';
}
fclose($file);
?>

Функция feof() проверяет, достигнут ли конец файла. fgets() читает одну строку.

Более простые альтернативы

Для быстрых операций PHP предлагает функции-обёртки:

  • file_get_contents($filename) — читает весь файл в строку.
  • file_put_contents($filename, $data) — записывает строку в файл (создаёт или перезаписывает).
<?php
// Чтение
$content = file_get_contents('test.txt');
echo $content;

// Запись
file_put_contents('new.txt', 'Простая запись');
?>

2. Управление директориями: создание, удаление, навигация

Работа с папками в PHP почти так же проста, как с файлами. Главные функции — mkdir(), rmdir() и scandir().

Создание папки

<?php
$dir = 'uploads';
if (!is_dir($dir)) {
    mkdir($dir, 0777, true);
    echo 'Папка создана';
} else {
    echo 'Папка уже существует';
}
?>

Параметр 0777 — права доступа (маска). Третий аргумент true позволяет создать вложенные директории рекурсивно (например, images/2024/).

Удаление папки

Функция rmdir() удаляет только пустую директорию. Если внутри есть файлы, нужно сначала очистить её:

<?php
function removeDir($dir) {
    if (!is_dir($dir)) return;
    $items = scandir($dir);
    foreach ($items as $item) {
        if ($item == '.' || $item == '..') continue;
        $path = $dir . '/' . $item;
        if (is_dir($path)) {
            removeDir($path);
        } else {
            unlink($path);
        }
    }
    rmdir($dir);
}
removeDir('temp');
echo 'Папка удалена';
?>

Получение списка файлов в папке

<?php
$files = scandir('uploads');
foreach ($files as $file) {
    if ($file != '.' && $file != '..') {
        echo $file . '<br>';
    }
}
?>

3. Проверка прав доступа и метаданных

Перед работой с файлом полезно убедиться, что он существует и доступен для чтения/записи. Для этого используйте:

  • file_exists($path) — проверяет, существует ли файл или папка.
  • is_readable($path) — можно ли читать.
  • is_writable($path) — можно ли писать.
  • filesize($path) — размер файла в байтах.
  • filemtime($path) — время последней модификации (Unix timestamp).

Пример: безопасная запись с проверкой

<?php
$file = 'config.php';
if (file_exists($file) && is_writable($file)) {
    file_put_contents($file, '<?php return [];');
    echo 'Файл обновлён';
} else {
    echo 'Невозможно записать файл';
}
?>

Изменение прав доступа (chmod)

Иногда нужно явно установить права на файл или папку:

<?php
chmod('uploads', 0755); // Владелец: всё, остальные: чтение+выполнение
chmod('private.txt', 0600); // Только владелец
?>

Помните: права задаются в восьмеричной системе (с ведущим нулём).

4. Удаление и переименование файлов

Для удаления одного файла служит функция unlink(). Переименование или перемещение — rename().

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

<?php
$file = 'old.txt';
if (file_exists($file)) {
    unlink($file);
    echo 'Файл удалён';
} else {                

Блоги

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