当前位置:Gxlcms > PHP教程 > PHP下如何对文件进行加锁

PHP下如何对文件进行加锁

时间:2021-07-01 10:21:17 帮助过:2人阅读

  1. <?php
  2. /*************************************************************************
  3. *file lock
  4. *@author Zeal Li
  5. *http://www.zeali.net/
  6. *
  7. *************************************************************************/
  8. /*
  9. *lock_thisfile:获得独享锁
  10. *@param $tmpFileStr 用来作为共享锁文件的文件名(可以随便起一个名字)
  11. *@param $locktype 锁类型,缺省为false(非阻塞型,也就是一旦加锁失败则直接返回false),设置为true则会一直等待加锁成功才返回
  12. *@return 如果加锁成功,则返回锁实例(当使用unlock_thisfile方法的时候需要这个参数),加锁失败则返回false.
  13. */
  14. function lock_thisfile($tmpFileStr,$locktype=false){
  15. if($locktype == false)
  16. $locktype = LOCK_EX|LOCK_NB;
  17. $can_write = 0;
  18. $lockfp = @fopen($tmpFileStr.".lock","w");
  19. if($lockfp){
  20. $can_write = @flock($lockfp,$locktype);
  21. }
  22. if($can_write){
  23. return $lockfp;
  24. }
  25. else{
  26. if($lockfp){
  27. @fclose($lockfp);
  28. @unlink($tmpFileStr.".lock");
  29. }
  30. return false;
  31. }
  32. }
  33. /**
  34. *unlock_thisfile:对先前取得的锁实例进行解锁
  35. *@param $fp lock_thisfile方法的返回值
  36. *@param $tmpFileStr 用来作为共享锁文件的文件名(可以随便起一个名字)
  37. */
  38. function unlock_thisfile($fp,$tmpFileStr){
  39. @flock($fp,LOCK_UN);
  40. @fclose($fp);
  41. @fclose($fp);
  42. @unlink($tmpFileStr.".lock");
  43. }
  44. ?>
  1. <?php
  2. // 使用举例
  3. $tmpFileStr = "/tmp/mylock.loc";
  4. // 等待取得操作权限,如果要立即返回则把第二个参数设为false.
  5. $lockhandle = lock_thisfile($tmpFileStr,true);
  6. if($lockhandle){
  7. // 在这里进行所有需要独占的事务处理。
  8. // ... ...
  9. // 事务处理完毕。
  10. unlock_thisfile($lockhandle,$tmpFileStr);
  11. }
  12. ?>

人气教程排行