将文件和路径一起删除,否则将在PHP中回滚


Deleting Files and Paths Together otherwise Rollback in PHP

在我的脚本中,我首先删除数据库中的文件路径。如果删除路径已完成。我正在删除文件。

我意识到我的ftp面板出了问题。有些文件是孤立文件。数据库中没有路径,但我有文件。

您知道,我们可以使用try-catch块来提交和回滚数据库查询。文件有什么技巧吗。例如,我们将删除路径,然后开始删除文件。如果在删除文件时出现问题。我们必须回滚文件和路径。

您可以创建一个备份策略,声明在删除之前必须备份所有文件,一旦成功,您就可以决定如何处理备份文件。

另一个解决方案是将所有删除的文件移到一个临时的"删除"文件夹中,一旦所有文件都被成功删除,就删除"删除"的文件夹,这样你就可以调用文件

我认为使用外部工具或文件系统可以做到这一点

  • 可以使用具有回滚功能的特殊文件系统-zfs、btrfs。。。

  • 版本控制系统可以用于回滚到以前提交的状态

从PHP执行此操作可能需要一些额外的工作锁,调用仅对root用户可用的可执行文件等。

看起来您需要类似于"删除队列"的东西——在单独的进程中运行并等待命令的守护进程。

当您决定删除数据时,首先在队列表中添加路径,若成功添加路径,则删除记录,否则回滚事务。这样可以保证所有修补程序都显示在删除日志中。

守护进程侦听带有路径的表,并逐个删除文件。有一种算法(它不是唯一正确的算法,你可以选择不同的逻辑):

  1. 启动事务
  2. 从表中删除单个路径
  3. 删除文件
  4. 提交事务

如果步骤#3失败,您可以稍后重试操作(可能是网络连接问题),或者向管理员报告失败(文件是只读的或不存在)。