如何使用php在事务中执行文件系统操作


How to perform filesystem operations in transaction with php?

我正在寻找使用具有事务支持的php实现文件系统操作的方法。例如,如果我在事务中执行移动、复制和删除等操作,如果其中一个操作失败,脚本需要恢复所有已经执行的操作。我有点无能为力,正在寻求指导,如何才能实现。是否存在可用的库或解决方案?如果这个问题听起来很模糊,我很抱歉。

最常见的模式是将所有内容复制到其他地方,对副本进行操作,如果一切正常,则替换原始内容。

有些东西告诉我PHP流包装器在这方面也很有用。可以覆盖'file://'协议并在虚拟文件系统中操作(概念证明:https://github.com/Respect/Test#streamwrapper)。

文件系统——与数据库管理系统相反——不支持事务。然而,有些确实提供了实现事务所需的东西;这就是锁定和日志记录。日志记录不会是您的问题,因为您也可以在php中这样做,但是您需要一个提供文件锁的文件系统。

我建议你不要自己实现这样的东西——你可能会遇到很多问题。数据库研究人员回顾了几十年的研究历史,在这里。

但是如果你必须这样做,你可以(首先)在php中实现类似两阶段锁定的东西。此外,您可以考虑使用命令模式,这有助于为您的回滚提供撤销功能。

一种选择是考虑将文件存储为数据库中的blob,而不是文件。这些将支持事务和数据库的所有其他特性。

可以在高级文件系统(如ZFS)上支持事务,但不能直接与PHP一起支持,并且Linux上默认不安装ZFS。