在我的脚本中,我首先删除数据库中的文件路径。如果删除路径已完成。我正在删除文件。
我意识到我的ftp面板出了问题。有些文件是孤立文件。数据库中没有路径,但我有文件。
您知道,我们可以使用try-catch块来提交和回滚数据库查询。文件有什么技巧吗。例如,我们将删除路径,然后开始删除文件。如果在删除文件时出现问题。我们必须回滚文件和路径。
您可以创建一个备份策略,声明在删除之前必须备份所有文件,一旦成功,您就可以决定如何处理备份文件。
另一个解决方案是将所有删除的文件移到一个临时的"删除"文件夹中,一旦所有文件都被成功删除,就删除"删除"的文件夹,这样你就可以调用文件
我认为使用外部工具或文件系统可以做到这一点
-
可以使用具有回滚功能的特殊文件系统-zfs、btrfs。。。
-
版本控制系统可以用于回滚到以前提交的状态
从PHP执行此操作可能需要一些额外的工作锁,调用仅对root用户可用的可执行文件等。
看起来您需要类似于"删除队列"的东西——在单独的进程中运行并等待命令的守护进程。
当您决定删除数据时,首先在队列表中添加路径,若成功添加路径,则删除记录,否则回滚事务。这样可以保证所有修补程序都显示在删除日志中。
守护进程侦听带有路径的表,并逐个删除文件。有一种算法(它不是唯一正确的算法,你可以选择不同的逻辑):
- 启动事务
- 从表中删除单个路径
- 删除文件
- 提交事务
如果步骤#3失败,您可以稍后重试操作(可能是网络连接问题),或者向管理员报告失败(文件是只读的或不存在)。