Rmdir: примеры (PHP)
rmdir(string $directory, ?resource $context = null): boolФункция rmdir() в PHP предназначена для удаления пустой директории. Она используется в случаях, когда требуется очистить файловую структуру или удалить временные каталоги, созданные в процессе работы скрипта.
- directory (обязательный): Строка, указывающая путь к удаляемой директории. Может быть абсолютным или относительным.
- context (необязательный): Ресурс контекста потока, создаваемый с помощью функции
stream_context_create(). Используется для модификации поведения работы с потоком, например, при удалении директории через FTP или другие обертки.
Функция возвращает true в случае успеха и false в случае возникновения ошибки. Если директория не пуста, не существует или у скрипта недостаточно прав, будет возвращено false.
<?php
$dir = 'test_dir';
if (rmdir($dir)) {
echo "Директория '$dir' успешно удалена.";
} else {
echo "Не удалось удалить директорию '$dir'.";
}
?>Директория 'test_dir' успешно удалена.
<?php
$dir = 'non_empty_dir';
if (@rmdir($dir)) {
echo "Директория удалена.";
} else {
$error = error_get_last();
echo "Ошибка: " . $error['message'];
}
?>Ошибка: rmdir(non_empty_dir): Directory not empty
unlink() - используется для удаления файлов. Не подходит для директорий.
mkdir() - антипод rmdir(), создает директорию.
Функции FileSystemIterator или рекурсивное удаление - в PHP нет встроенной функции для рекурсивного удаления непустых папок. Для этой задачи используется комбинация итераторов или рекурсивных функций с unlink() и rmdir(). Предпочтительнее использовать rmdir() для гарантированно пустых каталогов, а для сложных операций - писать кастомные функции или использовать сторонние библиотеки.
<?php
$dir = 'dir_with_files';
if (!rmdir($dir)) {
echo "Ошибка: Директория не пуста или нет прав.";
}
?>Ошибка: Директория не пуста или нет прав.
<?php
$dir = 'non_existent_dir';
var_dump(rmdir($dir));
?>bool(false)
<?php
$dir = '/root/protected_dir';
if (!rmdir($dir)) {
echo "Ошибка: Отказано в доступе.";
}
?>Ошибка: Отказано в доступе.
В PHP 8.0 и PHP 8.1 для функции rmdir() не было внесено значимых изменений или новых параметров. Функция сохраняет свою стабильность и обратную совместимость. Работа с контекстом потока ($context) остается прежней.
<?php
// Пример для гипотетической обертки
$context = stream_context_create(array());
$dir = 'ftp://example.com/some_dir';
if (rmdir($dir, $context)) {
echo "Удалено через потоковый контекст.";
}
?><?php
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
$path = $dir . DIRECTORY_SEPARATOR . $object;
if (is_dir($path)) {
rrmdir($path);
} else {
unlink($path);
}
}
}
rmdir($dir);
}
}
rrmdir('my_project_cache');
echo "Директория и её содержимое рекурсивно удалены.";
?>Директория и её содержимое рекурсивно удалены.
<?php
$tempDir = sys_get_temp_dir() . '/my_temp_' . uniqid();
mkdir($tempDir);
// ... работа с файлами в $tempDir ...
// Очистка
array_map('unlink', glob($tempDir . '/*'));
if (rmdir($tempDir)) {
echo "Временная директория очищена.";
}
?>Временная директория очищена.
import os
try:
os.rmdir('test_dir')
print("Директория удалена")
except OSError as e:
print(f"Ошибка: {e.strerror}")Директория удалена
Аналогична PHP, удаляет только пустые директории. Для рекурсивного удаления используется shutil.rmtree().
const fs = require('fs').promises;
async function removeDir() {
try {
await fs.rmdir('test_dir');
console.log('Директория удалена');
} catch (err) {
console.error('Ошибка:', err.message);
}
}
removeDir();Директория удалена
В современных версиях Node.js рекомендуется использовать fs.rm() с опцией { recursive: true } для удаления непустых папок.
rmdir test_dir# Команда не выводит результат при успехе. При ошибке: rmdir: failed to remove 'test_dir': Directory not empty
Поведение аналогичное, удаляет только пустые директории.