例如,我有一个名为“Temp”的文件夹,我想使用PHP删除或刷新该文件夹中的所有文件。我可以这样做吗?


当前回答

Unlinkr函数递归删除给定路径下的所有文件夹和文件,确保它不删除脚本本身。

function unlinkr($dir, $pattern = "*") {
    // find all files and folders matching pattern
    $files = glob($dir . "/$pattern"); 

    //interate thorugh the files and folders
    foreach($files as $file){ 
    //if it is a directory then re-call unlinkr function to delete files inside this directory     
        if (is_dir($file) and !in_array($file, array('..', '.')))  {
            echo "<p>opening directory $file </p>";
            unlinkr($file, $pattern);
            //remove the directory itself
            echo "<p> deleting directory $file </p>";
            rmdir($file);
        } else if(is_file($file) and ($file != __FILE__)) {
            // make sure you don't delete the current script
            echo "<p>deleting file $file </p>";
            unlink($file); 
        }
    }
}

如果你想删除你放置这个脚本的所有文件和文件夹,然后像下面这样调用它

//get current working directory
$dir = getcwd();
unlinkr($dir);

如果你只想删除PHP文件,那么就像下面这样调用它

unlinkr($dir, "*.php");

您也可以使用任何其他路径删除文件

unlinkr("/home/user/temp");

这将删除home/user/temp目录下的所有文件。

其他回答

public static function recursiveDelete($dir)
{
    foreach (new \DirectoryIterator($dir) as $fileInfo) {
        if (!$fileInfo->isDot()) {
            if ($fileInfo->isDir()) {
                recursiveDelete($fileInfo->getPathname());
            } else {
                unlink($fileInfo->getPathname());
            }
        }
    }
    rmdir($dir);
}

发布了一个通用的文件和文件夹处理类,用于复制,移动,删除,计算大小等,可以处理单个文件或一组文件夹。

https://gist.github.com/4689551

使用方法:

复制(或移动)一个文件或一组文件夹/文件:

$files = new Files();
$results = $files->copyOrMove('source/folder/optional-file', 'target/path', 'target-file-name-for-single-file.only', 'copy');

删除单个文件或删除路径下的所有文件和文件夹:

$files = new Files();
$results = $files->delete('source/folder/optional-file.name');

计算单个文件或一组文件夹中文件的大小:

$files = new Files();
$results = $files->calculateSize('source/folder/optional-file.name');
 <?
//delete all files from folder  & sub folders
function listFolderFiles($dir)
{
    $ffs = scandir($dir);
    echo '<ol>';
    foreach ($ffs as $ff) {
        if ($ff != '.' && $ff != '..') {
            if (file_exists("$dir/$ff")) {
                unlink("$dir/$ff");
            }
            echo '<li>' . $ff;
            if (is_dir($dir . '/' . $ff)) {
                listFolderFiles($dir . '/' . $ff);
            }
            echo '</li>';
        }
    }
    echo '</ol>';
}
$arr = array(
    "folder1",
    "folder2"
);
for ($x = 0; $x < count($arr); $x++) {
    $mm = $arr[$x];
    listFolderFiles($mm);
}
//end
?> 

我已经构建了一个非常简单的包,叫做“Pusheh”。使用它,您可以清除目录或完全删除目录(Github链接)。Packagist上也有。

例如,如果你想清除Temp目录,你可以这样做:

Pusheh::clearDir("Temp");

// Or you can remove the directory completely
Pusheh::removeDirRecursively("Temp");

如果你感兴趣,可以查看维基。

$files = glob('path/to/temp/*'); // get all file names
foreach($files as $file){ // iterate files
  if(is_file($file)) {
    unlink($file); // delete file
  }
}

如果你想删除像.htaccess这样的“隐藏”文件,你必须使用

$files = glob('path/to/temp/{,.}*', GLOB_BRACE);