Работа с каталогами
Просматривайте, создавайте и удаляйте каталоги с помощью 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 — локальная установка не требуется.
Все уроки этого курса
- Чтение файлов с помощью PHP
- Запись и добавление данных в файлы
- Работа с каталогами
- Обработка загрузки файлов