没能理解的一个‘类’,求解释
以下代码是一个程序中的一个类文件(lock.php),先说下他lock.php实际的作用:
在未知(是我不理解)的情况下,会在缓存文件夹 cache下生成一个.lock文件,例如index.php.lock 如果出现这个index.php.lock文件,那网站的首页就打不开了,必须手动删除它,再刷新首页,出现正常的缓存文件index.php 才能正常打开系统。
这个故障是不定时发生的,我现在也不理解在什么情况下才会发生,不理解为什么源码的作者为什么要设置这个功能。因为不知道最终来源,也没办法找源码的作者咨询了。
前几天,我把这个类文件lock.php删除了,网站一直正常,我以为这样就不会再有index.php.lock 文件了,但今天系统又打不开了,发现正常的cache/index.php缓存不见了,把这个类文件还原,然后再刷新系统,出现正常的cache/index.php,系统也就正常了。
lock.php的源码如下:
<?php
class lock{
private $num,$lock_marker,$lock_file,$timeout;
public $islock;
private function file_timeout(){
if(file_exists($this->lock_file)){
if(time()-filemtime($this->lock_file)>=$this->timeout){
@unlink($this->lock_file);
return true;
}
return false;
}else return true;
}
function __construct($num=1,$timeout=3,$wait=false,$wait_time=0,$marker = ''){
$this->num=$num;
$marker ||$marker = $_SERVER['SCRIPT_FILENAME'];
$marker = md5($marker);
$this->lock_marker = $marker;
$this->timeout=$timeout;
$this->lock_file=d('./cache/lock/'.$this->lock_marker.$this->num.'.lock');
if(file_exists($this->lock_file)){
$this->islock=!$this->file_timeout();
}else $this->islock=false;
if(!$this->islock)touch($this->lock_file);
else {
if($wait){
$wait_start=0;
while(!$this->file_timeout()){
if($wait_time>0){
$wait_start+=100000;
if($wait_start>$wait_time)break;
}
}
file_exists($this->lock_file)&&@unlink($this->lock_file);
touch($this->lock_file);
$this->islock=false;
}
}
}
function __destruct(){
$this->close();
}
public function close(){
!$this->islock&&file_exists($this->lock_file)&&@unlink($this->lock_file);
}
}
?>