PHP скрипт для удаления точечных файлов из каталога Linux

Я работал над проектом, который включает в себя этап, на котором сценарию необходимо автоматически удалить определенный каталог в Linux (и все его содержимое).

В настоящее время я использую следующий код для этого:

# Perform a recursive removal of the obsolete folder
$dir_to_erase = $_SESSION['path'];
function removeDirectory($dir_to_erase) {
$files = glob($dir_to_erase . '/*');
foreach ($files as $file) {
is_dir($file) ? removeDirectory($file) : unlink($file);
}
rmdir($dir_to_erase);
return;
}

куда $_SESSION['path'] папка для удаления Работал как чудо, но недавно мне пришлось добавить в папку файл .htaccess, и я заметил, что скрипт перестал работать правильно (он продолжает нормально удалять остальные файлы, но не файлы .htaccess).

Может кто-нибудь указать мне на то, что я должен добавить в код включить скрытые файлы точек в процессе удаления?

2

Решение

просто вы можете положиться на DirectoryIterator

Класс DirectoryIterator предоставляет простой интерфейс для просмотра
содержимое каталогов файловой системы.

function removeDirectory($dir_to_erase) {
$files = new DirectoryIterator($dir_to_erase);
foreach ($files as $file) {
// check if not . or ..
if (!$file->isDot()) {
$file->isDir() ? removeDirectory($file->getPathname()) : unlink($file->getPathname());
}
}
rmdir($dir_to_erase);
return;
}

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

1

Другие решения

Вы можете немного изменить свою функцию, чтобы удалить скрытые файлы также:

function removeDirectory($dir)
{
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (is_dir($dir."/".$object))
removeDirectory($dir."/".$object);
else
unlink($dir."/".$object);
}
}
rmdir($dir);
}
}
1

Согласно этому ответу:

PHP glob () не находит .htaccess

glob(".*") найду .htaccess

0
По вопросам рекламы [email protected]