为了更好的控制php程序同时操作的一些问题我整理了一个进程锁的类我们可以利用这个进程锁实现程序的控制,程序代码如下:
 
  <?php
  //+----------------------------------------------
  //|    Usage:
  //+----------------------------------------------
  //|    public function _initialize(){
  //|        import('@.Util.PHPLock');
  //|
  //|        if(PHPLock::islocked()){
  //|            echo "[+] Status: Locked\n";
  //|            echo "[+] Exit\n";
  //|            exit();
  //|        }else{
  //|            echo "[+] Status: Unlocked\n";
  //|            echo "[-] Locking Now\n";
  //|            PHPLock::lock();
  //|        }
  //|    }
  //|
  //|    function __destruct(){
  //|        if(true === PHPLock::unlock()){
  //|            echo "[+] Unlock Success\n";
  //|        }
  //|    }  
  //+----------------------------------------------
  class PHPLock
  {
      const PHPLOCK_TIMEOUT = 1200;
      static private $pid = null;
       
      static public function lock(){
          $key = self::__getKey();
          self::$pid = time();
          F($key, self::$pid);
          return true;
      }
       
      static public function unlock(){
          $key = self::__getKey();
          if(self::$pid){
              F($key, null);
              return true;
          }
          return;
      }
       
      static public function islocked(){
          $key = self::__getKey();
          $time = F($key);
          if(!$time){
              return false;
          }elseif(time() - $time >= self::getTimeout()){
              self::unlock();
              return false;
          }else{
              return true;
          }
      }
       
      static public function getTimeout(){
          $key = str_replace(self::__getKey(), '_Lock', '_TIMEOUT');
          $expire = C($key) ? C($key) : self::PHPLOCK_TIMEOUT;
          return $expire;
      }
       
      static private function __getKey(){
          return (defined('GROUP_NAME') ? GROUP_NAME.'_' : '') . MODULE_NAME . '_' . ACTION_NAME . '_Lock';
      }
  }
  ?> 

dawei

【声明】:达州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。