acet / reslock
可信赖的咨询资源锁 - 用于文件和其他争议性资源
1.0.0
2020-07-05 08:28 UTC
Requires
- php: ^5.3.3 || ^7.0
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");
}