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


当前回答

$dir = 'your/directory/';
foreach(glob($dir.'*.*') as $v){
    unlink($v);
}

其他回答

foreach (new DirectoryIterator('/path/to/directory') as $fileInfo) {
    if(!$fileInfo->isDot()) {
        unlink($fileInfo->getPathname());
    }
}

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

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

下面是一种使用标准PHP库(SPL)的更现代的方法。

$dir = "path/to/directory";
if(file_exists($dir)){
    $di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
    $ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST);
    foreach ( $ri as $file ) {
        $file->isDir() ?  rmdir($file) : unlink($file);
    }
}

如果你想删除文件夹中的所有内容(包括子文件夹),请使用array_map, unlink和glob的组合:

array_map( 'unlink', array_filter((array) glob("path/to/temp/*") ) );

这个调用还可以处理空目录(感谢您的提示,@mojuba!)