删除文件和目录

删除文件

unlink 函数删除一个文件,并返回该操作是否成功。

$filename = '/path/to/file.txt';

if (file_exists($filename)) {
    $success = unlink($filename);
    
    if (!$success) {
         throw new Exception("Cannot delete $filename");
    }
}

使用递归删除删除目录

另一方面,应使用 rmdir 删除目录。但是,此功能仅删除空目录。要删除包含文件的目录,请先删除目录中的文件。如果目录包含子目录,则可能需要递归

以下示例扫描目录中的文件,以递归方式删除成员文件/目录,并返回已删除的文件(而不是目录)的数量。

function recurse_delete_dir(string $dir) : int {
    $count = 0;

    // ensure that $dir ends with a slash so that we can concatenate it with the filenames directly
    $dir = rtrim($dir, "/\\") . "/";

    // use dir() to list files
    $list = dir($dir);

    // store the next file name to $file. if $file is false, that's all -- end the loop.
    while(($file = $list->read()) !== false) {
        if($file === "." || $file === "..") continue;
        if(is_file($dir . $file)) {
            unlink($dir . $file);
            $count++;
        } elseif(is_dir($dir . $file)) {
            $count += recurse_delete_dir($dir . $file);
        }
    }

    // finally, safe to delete directory!
    rmdir($dir);

    return $count;
}