PHP 从 Linux 目录中删除点文件的脚本

PHP script to remove dot files from Linux directory

我一直在做一个项目,涉及到一个步骤,期间脚本需要自动删除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 文件)。

谁能指出我应该添加到代码中的内容,包括删除过程中的隐藏点文件?

根据这个答案:

PHP glob() doesnt find .htaccess

glob(".*") 会找到 .htaccess

您还可以稍微修改您的函数以删除隐藏文件:

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); 
    } 
}

简单来说,可以靠DirectoryIterator

The DirectoryIterator class provides a simple interface for viewing the contents of filesystem directories.

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;
}

您可以使用其中的许多功能,因为检查所有者非常有用,可确保不删除关键文件。