为了更好的控制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'; } }
文章链接:
随便收藏,请保留本文地址!