PHP自动从服务器脚本上的所有文件夹中删除不需要的文件数组

时间:2012-06-02 10:04:02

标签: php automation

我有几个PHP脚本用于从我整个服务器上的所有文件夹中删除error_log,.DS_Store等文件。我只是将这些脚本上传到我的根目录(public_html),并在我想要进行一些清理时定期访问它们。当我访问脚本加载位置的URL时,它会自动开始工作。这一切都很完美,我想继续使用它。

但是,我很乐意将这种自动化整合到一个脚本中,我可以列出一系列不需要的文件,如下所示:

$unwanted_filenames = array(
'.DS_Store',
'.localized',
'Thumbs.db',
'error_log'
);

只需浏览所有文件夹并删除我在数组中列出的所有文件。

我现在使用的脚本是过度的,列出了每个单独的文件以及它释放了多少等等。我是一个极简主义者,并且会喜欢用最少的代码来完成工作的最简单的脚本。

因此,当我访问该页面时,它会自动运行,白色屏幕上没有任何东西可以,然后可能是一个简单的“完成。释放3MB”。信息。就是这样。

2 个答案:

答案 0 :(得分:2)

好的 - 这是PHP中最短但我能想到的就是这样做:

$unwanted_filenames = array(
    '.DS_Store',
    '.localized',
    'Thumbs.db',
    'error_log'
    );
$it = new RecursiveDirectoryIterator("/");  // Set starting directory here
foreach(new RecursiveIteratorIterator($it) as $file) {
    if (in_array(basename($file), $unwanted_filenames)) {
        @unlink($file);  // THe @ hides errors, remove if you want to see them
    }
}

希望不言自明 - 是的,它确实存在子目录(即“递归”位)。

你说minamalistic,所以我没有包括释放的空间,但是如果要添加它,只需在取消链接之前添加$ FreedSpace + = filesize($ file)。

答案 1 :(得分:0)

我使用它,你可以这样做:

<?php    
    $dir = "/var/www/vhosts/"; //Write your dirname here
    $rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
    $total_thumbs = 0;
    $total_ds = 0;
    foreach ($rii as $file) {
        if ($file->isDir()){
            continue;
        }

        $parcala = explode('.', $file->getFilename());
        $uzanti = end($parcala);

        if ($file->getFilename() == 'Thumbs.db') {
            unlink($file->getPathname());
            $total_thumbs++;
        }

        if ($uzanti == '.DS_Store' || $file->getFilename() == 'DS_Store' || $file->getFilename() == '.DS_Store') {
            unlink($file->getPathname());
            $total_ds++;
        }
    }

    echo $total_thumbs . ' Thumbs.db file and ' . $total_ds . ' DS_Store file deleted!';

如果您想要自动化,可以使用 Cronjob