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

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

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

Начать курс

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

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

Основные функции для работы с файлами в PHP

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

Открытие и закрытие файла: fopen() и fclose()

Для начала работы с файлом его нужно открыть с помощью fopen(). Функция принимает два обязательных параметра: путь к файлу и режим открытия. Режим определяет, что вы можете делать с файлом: читать, писать, добавлять данные в конец и т.д.

Основные режимы:

  • r — только чтение. Указатель в начале файла.
  • r+ — чтение и запись. Указатель в начале.
  • w — только запись. Если файл существует, он очищается. Если нет — создаётся.
  • w+ — чтение и запись. Очищает файл или создаёт новый.
  • a — только запись в конец файла. Если файла нет — создаётся.
  • a+ — чтение и запись в конец.
<?php
$file = fopen("example.txt", "w"); // Открываем файл для записи
if ($file) {
    echo "Файл открыт успешно.";
    fclose($file); // Всегда закрывайте файл после работы
} else {
    echo "Не удалось открыть файл.";
}
?>

Чтение из файла: fgets(), fread() и file_get_contents()

Самый простой способ прочитать весь файл — функция file_get_contents(). Она возвращает содержимое в виде строки.

<?php
$content = file_get_contents("example.txt");
echo $content;
?>

Если нужно читать построчно (например, для больших файлов), используйте fgets() в цикле:

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

Функция fread() позволяет прочитать заданное количество байт:

<?php
$file = fopen("example.txt", "r");
$content = fread($file, 100); // Читаем первые 100 байт
echo $content;
fclose($file);
?>

Запись в файл: fwrite() и file_put_contents()

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

<?php
$data = "Привет, мир!";
file_put_contents("example.txt", $data);
?>

Если нужно добавить данные в конец, используйте флаг FILE_APPEND:

<?php
$data = "Новая строка\n";
file_put_contents("example.txt", $data, FILE_APPEND);
?>

Для более гибкой записи (например, в бинарном режиме) применяется fwrite():

<?php
$file = fopen("example.txt", "w");
fwrite($file, "Строка для записи");
fclose($file);
?>

Работа с директориями в PHP

Помимо файлов, PHP позволяет управлять папками: создавать, удалять, читать их содержимое.

Создание и удаление папок: mkdir() и rmdir()

Функция mkdir() создаёт новую директорию. Вторым параметром можно указать права доступа (по умолчанию 0777).

<?php
if (mkdir("new_folder", 0777)) {
    echo "Папка создана.";
} else {
    echo "Ошибка создания папки.";
}
?>

Для удаления пустой папки используйте rmdir():

<?php
if (rmdir("new_folder")) {
    echo "Папка удалена.";
} else {
    echo "Папка не пуста или не существует.";
}
?>

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

Чтение содержимого папки: scandir()

Функция scandir() возвращает массив с именами всех файлов и подпапок в указанной директории.

<?php
$files = scandir("/var/www/html");
foreach ($files as $file) {
    if ($file != "." && $file != "..") {
        echo $file . "<br>";
    }
}
?>

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

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

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

  • file_exists($path) — проверяет, существует ли файл или директория.
  • is_file($path) — проверяет, является ли объект файлом.
  • is_dir($path) — проверяет, является ли объект директорией.
  • is_readable($path) — можно ли читать файл/папку.
  • is_writable($path) — можно ли записывать данные.
<?php
$path = "example.txt";
if (file_exists($path)) {
    if (is_readable($path)) {
        echo "Файл существует и доступен для чтения.";
    }
}                

Блоги

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