0Pricing
PHP Academy · Урок

Работа с каталогами

Просматривайте, создавайте и удаляйте каталоги с помощью scandir и mkdir

«Работа с каталогами» — бесплатный урок PHP Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

Операции с каталогами в PHP

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

  • scandir() — просмотр содержимого каталога
  • mkdir() — создание каталога
  • rmdir() — удаление пустого каталога
  • glob() — поиск файлов по шаблону

scandir()

Выводит список всех файлов и каталогов в каталоге:

<?php
$entries = scandir('/var/www/html/uploads');

// scandir includes '.' and '..'
$entries = array_diff($entries, ['.', '..']);

foreach ($entries as $entry) {
    echo $entry . PHP_EOL;
}

Сопоставление с шаблоном glob()

glob() возвращает файлы, соответствующие шаблону в стиле оболочки:

<?php
// Find all PHP files in a directory
$phpFiles = glob('/var/www/html/*.php');

// Recursively with GLOB_BRACE
$logs = glob('/var/log/{app,error,access}.log', GLOB_BRACE);

foreach ($phpFiles as $file) {
    echo basename($file) . PHP_EOL;
}

mkdir() и права доступа

Создавайте один или несколько вложенных каталогов:

<?php
$dir = '/var/www/uploads/2024/05';

// Create nested directories in one call:
if (!is_dir($dir)) {
    mkdir($dir, 0755, true);  // true = recursive
    echo "Created: $dir";
}

Удаление каталогов

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

<?php
function deleteDir(string $path): void {
    foreach (scandir($path) as $entry) {
        if ($entry === '.' || $entry === '..') continue;
        $full = $path . DIRECTORY_SEPARATOR . $entry;
        is_dir($full) ? deleteDir($full) : unlink($full);
    }
    rmdir($path);
}

deleteDir('/tmp/old_cache');

Перебор каталогов с помощью DirectoryIterator

Объектно-ориентированный способ перебора содержимого каталога:

<?php
$dir = new DirectoryIterator('/var/www/html/images');

foreach ($dir as $info) {
    if ($info->isDot()) continue;
    echo $info->getFilename();
    echo ' (' . $info->getSize() . ' bytes)';
    echo PHP_EOL;
}

RecursiveDirectoryIterator

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

<?php
$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator('/var/www/src')
);

foreach ($iterator as $file) {
    if ($file->isDot()) continue;
    if ($file->getExtension() === 'php') {
        echo $file->getPathname() . PHP_EOL;
    }
}

getcwd и chdir

Получайте и изменяйте текущий рабочий каталог:

<?php
$originalDir = getcwd();
echo 'Current: ' . $originalDir . PHP_EOL;

chdir('/var/www/html');
echo 'Changed to: ' . getcwd() . PHP_EOL;

// Restore
chdir($originalDir);
echo 'Restored: ' . getcwd() . PHP_EOL;

Работа с путями

Создавайте и разбирайте пути к файлам с помощью переносимых констант и функций:

<?php
// DIRECTORY_SEPARATOR = '/' on Unix, '\\' on Windows
$base    = '/var/www/app';
$subPath = 'uploads' . DIRECTORY_SEPARATOR . 'images';
$full    = $base . DIRECTORY_SEPARATOR . $subPath;

echo realpath($full);  // resolves symlinks

// __DIR__ is the directory of the current file
$configPath = __DIR__ . '/../config/settings.json';
echo realpath($configPath);

Дисковое пространство

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

<?php
$path = '/var/www';

$free  = disk_free_space($path);
$total = disk_total_space($path);
$used  = $total - $free;

echo 'Used: ' . round($used / 1024**3, 2) . ' GB';
echo 'Free: ' . round($free / 1024**3, 2) . ' GB';
echo 'Total: ' . round($total / 1024**3, 2) . ' GB';

Временный каталог SPL

Всегда используйте sys_get_temp_dir(), чтобы находить правильный временный каталог на разных платформах:

<?php
$tmpDir = sys_get_temp_dir();
echo 'Temp dir: ' . $tmpDir;

// Create a unique temporary directory
$uniqueDir = $tmpDir . DIRECTORY_SEPARATOR . 'myapp_' . uniqid();
mkdir($uniqueDir, 0700);

// ... use directory ...
// cleanup when done

Быстрая проверка

Какая функция PHP рекурсивно создаёт вложенные каталоги за один вызов?

Повторение: работа с каталогами

Операции с каталогами:

  • scandir() — просмотр содержимого, включая . и ..
  • glob() — поиск файлов по шаблону
  • mkdir($path, 0755, true) — рекурсивное создание
  • rmdir() — удаление пустого каталога
  • RecursiveDirectoryIterator для глубокого обхода
  • __DIR__ и DIRECTORY_SEPARATOR для переносимых путей

Часто задаваемые вопросы

Урок «Работа с каталогами» бесплатный?

Да — полный текст урока «Работа с каталогами» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Работа с каталогами»?

Просматривайте, создавайте и удаляйте каталоги с помощью scandir и mkdir Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Работа с каталогами»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Чтение файлов с помощью PHP
  2. Запись и добавление данных в файлы
  3. Работа с каталогами
  4. Обработка загрузки файлов
← Назад к PHP Academy