fostam / filelock
简单的基于文件的锁定,具有锁定超时和异常处理
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: ^5.5|^6.5
This package is auto-updated.
Last update: 2024-09-17 06:54:59 UTC
README
简单的基于文件的锁定。
功能
- 使用 flock() 进行基于文件的锁定
- 适用于Unix-like系统和Windows
- 支持获取锁的超时
- 无第三方依赖项
安装
安装 FileLock 最简单的方法是使用 composer
$> composer require fostam/filelock
用法
<?php require "vendor/autoload.php"; $fl = new \Fostam\FileLock\FileLock('mylock'); if (!$fl->acquire()) { exit; } // do exclusive stuff $fl->release();
锁定
将锁的名称作为第一个参数传递给构造函数
$fl = FileLock('mylock');
使用 acquire() 方法获取锁
$fl->acquire();
成功时返回 true,如果锁已存在则返回 false。如果发生错误,将抛出异常(见下文)。
可选地,可以传递秒数作为超时
$fl->acquire(10);
acquire() 方法将每秒尝试获取锁一次,直到超时。如果无法获取锁,将返回 false。
值为 0 将立即返回 false 如果锁定失败。如果没有提供超时,这也是默认行为。
解锁
显式释放锁
$fl->release();
如果在对象销毁时锁仍然存在,锁也会在 FileLock 类的析构函数中隐式释放。
锁文件
获取锁后,锁定进程的进程 ID (PID) 将写入锁文件。
默认情况下,锁文件将创建在系统临时目录中,该目录由 sys_get_temp_dir() 返回。可以将替代目录作为第二个参数传递给构造函数
$fl = FileLock('mylock', '/var/run');
在此示例中,锁文件将是 /var/run/mylock.lock。
如果需要,可以从 FileLock 对象检索完整的锁文件名
$filename = $fl->getLockFileName();
如果锁文件存储在需要定期清理的地方(例如,大多数 Linux 系统上的 /tmp),则可以使用 refresh() 方法刷新它
$fl->refresh();
这将更新文件的修改时间为当前时间戳。
注意:为了避免竞争条件,释放锁时不会删除锁文件。
异常
所有异常都继承自公共 LockFileException 类。
acquire() 方法可能会抛出以下异常之一
LockFileNotOpenableException:无法创建或打开锁文件LockFileOperationFailedException:对锁文件的文件系统操作失败LockFileVanishedException:在获取锁后锁文件已消失
如果解锁文件系统操作失败,release() 方法将抛出 LockFileOperationFailureException 异常。