Работа с файловой системой в PHP: функции и примеры

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

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

Начать курс

Работа с файловой системой в PHP: основные функции и примеры

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

1. Чтение файлов в PHP

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

1.1. Функция file_get_contents()

Самый простой способ прочитать весь файл в строку — использовать file_get_contents(). Эта функция подходит для небольших файлов (конфигурации, шаблоны).

<?php
// Чтение всего файла в строку
$content = file_get_contents('data.txt');
if ($content !== false) {
    echo "Содержимое файла: " . htmlspecialchars($content);
} else {
    echo "Ошибка чтения файла";
}
?>

1.2. Функция file()

Если нужно получить содержимое файла в виде массива строк (по одной строке на элемент), используйте file().

<?php
$lines = file('log.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $lineNum => $line) {
    echo "Строка " . ($lineNum + 1) . ": " . htmlspecialchars($line) . "<br>";
}
?>

1.3. Построчное чтение с fopen() + fgets()

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

<?php
$handle = fopen('large_file.csv', 'r');
if ($handle) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        echo $buffer . "<br>";
    }
    fclose($handle);
} else {
    echo "Не удалось открыть файл";
}
?>

2. Запись данных в файлы

Запись так же может выполняться разными способами. Основное различие — перезапись файла или добавление в конец.

2.1. Функция file_put_contents()

Быстрый способ записать строку в файл. Если файл не существует, он будет создан. По умолчанию файл перезаписывается.

<?php
$data = "Новая запись: " . date('Y-m-d H:i:s') . "\n";
// Перезапись файла
file_put_contents('log.txt', $data);
// Добавление в конец (флаг FILE_APPEND)
file_put_contents('log.txt', $data, FILE_APPEND);
?>

2.2. Ручная запись через fopen() + fwrite()

Для тонкого контроля (например, блокировки файла) используйте пару fopen() / fwrite().

<?php
$filename = 'counter.txt';
$handle = fopen($filename, 'c+'); // 'c+' — создаёт файл, если его нет
if (flock($handle, LOCK_EX)) { // эксклюзивная блокировка
    $current = (int) fread($handle, filesize($filename) ?: 1);
    $current++;
    ftruncate($handle, 0); // очищаем файл
    rewind($handle);
    fwrite($handle, $current);
    flock($handle, LOCK_UN); // снимаем блокировку
}
fclose($handle);
echo "Счётчик: $current";
?>

3. Работа с директориями

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

3.1. Создание папок (mkdir)

<?php
// Создать одну папку
if (!is_dir('uploads')) {
    mkdir('uploads', 0755);
}
// Рекурсивное создание вложенных папок (PHP 5.4+)
mkdir('images/2024/12', 0755, true);
?>

3.2. Удаление папок (rmdir)

rmdir() удаляет только пустую папку. Для удаления папки со всем содержимым нужна рекурсивная функция.

<?php
function deleteDirectory($dir) {
    if (!file_exists($dir)) {
        return true;
    }
    if (!is_dir($dir)) {
        return unlink($dir);
    }
    $items = array_diff(scandir($dir), ['.', '..']);
    foreach ($items as $item) {
        deleteDirectory($dir . DIRECTORY_SEPARATOR . $item);
    }
    return rmdir($dir);
}

// Пример использования
deleteDirectory('temp/cache');
?>

3.3. Просмотр содержимого папки (scandir)

<?php
$files = scandir('/var/www/html');
echo "Файлы в корне сайта:\n";
foreach ($files as $file) {
    if ($file != '.' && $file != '..') {
        echo $file . "\n";
    }
}
?>

4. Удаление, копирование и проверка существования файлов

4.1. Удаление файлов (unlink)

<?php
$file = 'old_report.pdf';
if (file_exists($file)) {
    if (unlink($file)) {
        echo "Файл удалён";
    } else {
        echo "Ошибка удаления (возможно, нет прав)";
    }
} else {
    echo "Файл не найден";
}
?>

4.2. Копирование (copy) и перемещение (rename)

<?php
// Копирование
copy('source.txt', 'backup/source_backup.txt');
// Перемещение (переименование)
rename('temp/tmp_file.txt', 'final/report.txt');
?>

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

<?php
$path = 'config.php';
if (file_exists($path)) {
    echo "Существует. ";
    if (is_file($path)) {
        echo "Это файл.";
    } elseif (is_dir($path)) {
        echo "Это папка.";
    }
    echo " Размер: " . filesize($path) . " байт";
    echo " Последнее изменение: " . date("d.m.Y H:i", filemtime($path));
}
?>

5. Безопасность при работе с файловой системой

Работа с фай

Блоги

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