10

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

4

3 回答 3

4

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

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

于 2013-02-27T15:51:19.257 回答
3

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

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

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

于 2013-02-27T15:45:39.187 回答
3

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

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

于 2013-02-27T15:51:12.377 回答