PHP通过文件锁实现进程锁
PHP通过文件锁实现进程锁
<?php //文件锁优点:实现简单,容易维护 //文件锁缺点:仅限单机,无法部署为分布式锁 $argument1 = "argument1"; $argument2 = "argument2"; $lock_dir = sys_get_temp_dir() . "/locks/"; if (!is_dir($lock_dir)) { if (!mkdir($lock_dir, 0755, true)) { exit("无法建锁,目录权限" . $lock_dir . PHP_EOL); } } $lock_uniq = md5(json_encode([$this->getName(), $argument1, $argument2])); $lock_file = "{$lock_dir}{$lock_uniq}"; if (!is_file($lock_file)) { if (@file_put_contents($lock_file, null) === false) { exit("无法建锁,文件权限" . $lock_file . PHP_EOL); } } $lock_ress = fopen($lock_file, "r+"); if (!flock($lock_ress, LOCK_EX | LOCK_NB)) { //LOCK_NB 的作用是不阻塞,在windows下是无效的 exit("已经运行,无需运行" . $lock_file . PHP_EOL); } /** * 其它业务代码↓↓↓↓↓↓ */ for ($i = 1; $i <= 20; $i++) { sleep(1); echo $i . PHP_EOL; } /** * 其它业务代码↑↑↑↑↑↑ */ fclose($lock_ress); unlink($lock_file);