PHP flock()替代方案

Mat*_*tty 13 php locking flock

PHP的文档页面flock()表明在IIS下使用它是不安全的.如果我不能flock在任何情况下都依赖,还有另一种方法可以安全地实现同样的目的吗?

hak*_*kre 7

在所有可能的情况下,没有其他方法可以安全地实现相同的目标.这是计算机系统的设计,对于跨平台代码而言,这项工作并非易事.

如果您需要安全使用flock(),请记录您的应用程序的要求.

或者,您可以创建自己的锁定机制,但必须确保它是原子的.这意味着,您必须测试锁定,如果它不存在,请建立锁定,同时确保没有其他任何东西可以获取锁定.

这可以通过创建表示锁的锁文件来完成,但仅限于它不存在.不幸的是,PHP没有提供这样的功能来以这种方式创建文件.

或者,您可以创建一个目录mkdir()并使用结果,因为它将true在创建目录时返回,false如果已存在则返回.

  • “这可以通过创建一个代表锁的锁文件来完成,但前提是它不存在。不幸的是,PHP 不提供这样的功能来以这种方式创建文件。” PHP 可以通过使用“fopen()”和“x”来做到这一点。 (2认同)
  • 仅当锁定文件不存在时才使用 fopen($file, "x")` 创建锁定文件有什么问题。根据 PHP 文档“这相当于为底层 open(2) 系统调用指定 O_EXCL|O_CREAT 标志”。这就是创建锁定文件的方式。所以,不,没有原子方法来创建“fopen”和“flock”文件,但有一种方法可以在不创建目录等的情况下创建锁定文件。 (2认同)