Lock.php 1005 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. namespace GatewayWorker\Lib;
  3. /**
  4. * 锁
  5. * 基于文件锁实现
  6. */
  7. class Lock
  8. {
  9. /**
  10. * handle
  11. * @var resource
  12. */
  13. private static $fileHandle = null;
  14. /**
  15. * 获取锁
  16. * @param bool block
  17. * @return bool
  18. */
  19. public static function get($block=true)
  20. {
  21. $operation = $block ? LOCK_EX : LOCK_EX | LOCK_NB;
  22. if(self::getHandle())
  23. {
  24. return flock(self::$fileHandle, $operation);
  25. }
  26. return false;
  27. }
  28. /**
  29. * 释放锁
  30. * @return true
  31. */
  32. public static function release()
  33. {
  34. if(self::getHandle())
  35. {
  36. return flock(self::$fileHandle, LOCK_UN);
  37. }
  38. return false;
  39. }
  40. /**
  41. * 获得文件句柄
  42. * @return resource
  43. */
  44. protected static function getHandle()
  45. {
  46. if(!self::$fileHandle)
  47. {
  48. self::$fileHandle = fopen(__FILE__, 'r+');
  49. }
  50. return self::$fileHandle;
  51. }
  52. }