PHP:删除目录的安全方法?
考虑以下代码:
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在任何子目录上失败,那么该目录将留下一些内容. 我希望删除所有内容,或删除任何内容.我正在考虑在删除之前复制目录,如果有任何失败,则恢复副本.但也许有更好的方法 – 比如锁定文件或类似的东西? 解决方法
我一般我会确认评论:
“复制它,删除它,如果删除则复制,否则抛出删除消息失败……” – We0 但是,让我们考虑一些方面: 尝试实现事务保存文件删除表示您希望允许在同一组文件上进行竞争文件锁定.事务处理通常是确保一致性的最“昂贵”方式.即使php有任何类型的testdelete可用也是如此,因为你需要在第一次运行时测试删除所有内容,然后再进行第二次循环,这会花费时间(并且你有危险在你的文件系统中发生了一些变化)与此同时).还有其他选择: >尝试隔离真正需要事务保存的内容并处理数据库中的数据访问.例如. MySQL / InnoDB支持事务处理的所有细节 是的,让我说我的推理不够可怕:) – 并且你实现了一个事务保存文件删除 – 你的例程可以这样实现: >备份所有文件 >总是完全运行,并记录所有错误(这可以在以后作为家庭作业任务列表返回给用户,但可能会长时间运行) >如果删除成功,所有罚款/完全停止;如果没有继续回滚 这只是文件级别的事务保存.它不处理有人在步骤5和6之间更改文件夹权限的情况. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |