Lock.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. namespace app\common\library;
  3. /**
  4. * 文件阻塞锁
  5. * Class Lock
  6. * @package app\common\library
  7. */
  8. class Lock
  9. {
  10. // resource
  11. static $resource = [];
  12. /**
  13. * 加锁
  14. * @param $uniqueId
  15. * @return bool
  16. */
  17. public static function lockUp($uniqueId)
  18. {
  19. static::$resource[$uniqueId] = fopen(static::getFilePath($uniqueId), 'w+');
  20. return flock(static::$resource[$uniqueId], LOCK_EX);
  21. }
  22. /**
  23. * 解锁
  24. * @param $uniqueId
  25. * @return bool
  26. */
  27. public static function unLock($uniqueId)
  28. {
  29. flock(static::$resource[$uniqueId], LOCK_UN);
  30. fclose(static::$resource[$uniqueId]);
  31. return static::deleteFile($uniqueId);
  32. }
  33. /**
  34. * 获取锁文件的路径
  35. * @param $uniqueId
  36. * @return string
  37. */
  38. private static function getFilePath($uniqueId)
  39. {
  40. $dirPath = RUNTIME_PATH . 'lock/';
  41. !is_dir($dirPath) && mkdir($dirPath, 0755, true);
  42. return $dirPath . md5($uniqueId);
  43. }
  44. /**
  45. * 删除锁文件
  46. * @param $uniqueId
  47. * @return bool
  48. */
  49. private static function deleteFile($uniqueId)
  50. {
  51. $filePath = RUNTIME_PATH . 'lock/' . md5($uniqueId);
  52. return file_exists($filePath) && unlink($filePath);
  53. }
  54. }