【发布时间】:2013-10-16 20:42:22
【问题描述】:
考虑这段代码:
public static function removeDir($src)
{
if (is_dir($src)) {
$dir = @opendir($src);
if ($dir === false)
return;
while(($file = readdir($dir)) !== false) {
if ($file != '.' && $file != '..') {
$path = $src . DIRECTORY_SEPARATOR . $file;
if (is_dir($path)) {
self::removeDir($path);
} else {
@unlink($path);
}
}
}
closedir($dir);
@rmdir($src);
}
}
这将删除一个目录。但是,如果 unlink 失败或 opendir 在任何子目录上失败,则该目录将保留一些内容。
我想要删除所有内容,或者不删除任何内容。我正在考虑在删除之前复制目录,如果有任何失败,请恢复副本。但也许有更好的方法 - 比如锁定文件或类似的东西?
【问题讨论】:
-
您可以使用
flock()锁定文件,但除了实际删除之外,无法检查文件/目录是否可以删除。不过,您可以事先检查 chmod 权限,或者使用is_writable()或类似的东西检查它是否可写。 -
这也可以用
fileperms()完成... -
就算权限没问题,不知道文件在别的进程打开会不会被删除。
-
复制它,删除它,如果删除则复制回来,否则抛出删除消息失败...
-
使用这段代码 exec("rm -rf $yourdirpath");