//+----------------------------------------------
//| 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';
}
}
?>
|