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

时间:2013-02-27 11:30:46

标签: php file filesystems

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

文件系统 - 与数据库管理系统不同 - 不支持事务。但有些确实提供了实现交易所需的东西;那就是锁定和记录。记录不是你的问题,因为你也可以在php中完成,但是你需要一个提供文件锁的文件系统。

我建议你不要自己实施这样的事情 - 你可能遇到很多问题。数据库人员回顾了几十年的研究历史。

但是如果你必须,你可以(一开始)在php中实现类似Two-phase locking的东西。此外,您可以考虑使用command pattern,这有助于您回滚的撤消功能。

答案 2 :(得分:3)

一种选择是考虑将文件作为BLOB存储在数据库中,而不是文件中。这些将支持事务以及数据库的所有其他功能。

可以在ZFS等高级文件系统上支持事务,但不能直接在PHP上支持事务,默认情况下不在Linux上安装ZFS。