acet/reslock

可信赖的咨询资源锁 - 用于文件和其他争议性资源

1.0.0 2020-07-05 08:28 UTC

This package is auto-updated.

Last update: 2024-09-29 05:55:43 UTC


README

文件和其他资源(类似于flock,但在所有平台上工作)的咨询资源锁。

主要用于保护文件不被两个或更多进程同时写入。这与PHP flock()函数类似,区别在于这是可信赖的(即使在Windows上)并且锁适用于任何资源 - 而不仅仅是文件。

它通过检查目录是否存在来确定是否已获得独占锁。由于mkdir()函数可以在单一的平台无关操作中返回目录是否存在,并在不存在时创建它,因此优先使用目录而不是文件。

至少在Windows系统上,这种方法比标准的flock()更可靠,因为flock()需要两个操作系统操作 - 检查锁文件是否存在,如果不存在则创建它。由于有2个操作,因此可能存在多个进程同时检查的情况;每个进程都得出锁文件不存在的结论,每个进程都创建文件,并且每个进程都相信自己拥有独占锁。

####要求 ResLock 需要

  • PHP 5.3.3+

####安装 ResLock 通过Composer安装。要在项目中添加ResLock的依赖,请执行以下操作:

运行以下命令以使用最新稳定版本

composer require acet/reslock

或者如果您想使用最新的master版本

composer require acet/reslock:dev-master

您也可以手动编辑您的composer.json文件

{ "require": { "acet/reslock": "v0.1.*" } }

####示例 - 更新可能引起其他相关方关注的文件

use acet\ResLock;

$contentious_file = 'contentious.file';

$reslock = new ResLock();

// Provide a name for the resource (any string will do - can be a file name, or the name of your cat)
if ($reslock->lock('tiddles')) {

    // resource successfully locked

    $file_contents = file_get_contents($contentious_file);
    $string = "Do something";
    file_put_contents($contentious_file, $string);

    $reslock->unlock();
}

else {
    throw new exception("Unable to lock the resource");
}