删除文件和目录
删除文件
该 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;
}