ホームページ >バックエンド開発 >PHPチュートリアル >「カテゴリ」がわかりません。説明してください。

「カテゴリ」がわかりません。説明してください。

WBOY
WBOYオリジナル
2016-06-13 12:55:12831ブラウズ

「クラス」について理解できません。説明してください
次のコードはプログラム内のクラス ファイル (lock.php) です。まず、lock.php の実際の機能について説明します。
未知の状況下で (私には理解できませんが)、index.php.lock などの .lock ファイルがキャッシュ フォルダーの下に生成されます。このファイルが表示されると、Web サイトのホームページを開くことができなくなります。開いている場合は、手動で削除し、ホームページを更新する必要があります。そうすれば、通常のキャッシュ ファイルindex.php がシステムを正常に開くように見えます。

この障害は時々発生しますが、ソースコードの作成者がなぜこの機能を設定したのか、どのような状況で発生するのかはまだわかりません。最終的なソースがわからないので、ソースコードの作成者に相談することもできません。

数日前、このクラスファイルlock.phpを削除し、Webサイトは正常に動作していましたが、index.php.lockファイルはもう存在しないと思っていましたが、今日再びシステムを開くことができなくなりました。通常のキャッシュ/インデックス .php キャッシュがなくなっています。このクラス ファイルを復元し、システムを更新してください。通常のキャッシュ/インデックス.php が表示されれば、システムは正常になります。

lock.php のソースコードは次のとおりです:

<?php<br />
<br />
class lock{<br />
private $num,$lock_marker,$lock_file,$timeout;<br />
public $islock;<br />
private function file_timeout(){<br />
if(file_exists($this->lock_file)){<br />
if(time()-filemtime($this->lock_file)>=$this->timeout){<br />
@unlink($this->lock_file);<br />
return true;<br />
}<br />
return false;<br />
}else return true;<br />
}<br />
function __construct($num=1,$timeout=3,$wait=false,$wait_time=0,$marker = ''){<br />
$this->num=$num;<br />
$marker ||$marker = $_SERVER['SCRIPT_FILENAME'];<br />
$marker = md5($marker);<br />
$this->lock_marker = $marker;<br />
$this->timeout=$timeout;<br />
$this->lock_file=d('./cache/lock/'.$this->lock_marker.$this->num.'.lock');<br />
if(file_exists($this->lock_file)){<br />
$this->islock=!$this->file_timeout();<br />
}else $this->islock=false;<br />
if(!$this->islock)touch($this->lock_file);<br />
else {<br />
if($wait){<br />
$wait_start=0;<br />
while(!$this->file_timeout()){<br />
if($wait_time>0){<br />
$wait_start+=100000;<br />
if($wait_start>$wait_time)break;<br />
}<br />
}<br />
file_exists($this->lock_file)&&@unlink($this->lock_file);<br />
touch($this->lock_file);<br />
$this->islock=false;<br />
}<br />
}<br />
}<br />
function __destruct(){<br />
$this->close();<br />
}<br />
public function close(){<br />
!$this->islock&&file_exists($this->lock_file)&&@unlink($this->lock_file);<br />
}<br />
}<br />
<br />
?>


-----解決策--------------------------------
なぜあなたのコードはできないと思うのですか? 通常の操作はどうですか?
if(!$this->islock) touch($this->lock_file);//キャッシュファイルのアクセス時間を変更します
実行条件は $this->islock is false
$this->islock が false の状況は次のとおりです:
$this->islock=!$this->file_timeout();
つまり、$this->file_timeout メソッドは true
を返します。 $this->file_timeout メソッドが true を返すと、
が存在します。 @unlink($this->lock_file);//キャッシュファイルを削除
true を返します;

キャッシュファイルは削除されているので、touch($this->lock_file)はエラーを報告しないのでしょうか?
警告: touch() [function.touch]: 引数
が無効なためファイルを作成できません
また、以下に
があります file_exists($this->lock_file)&&@unlink($this->lock_file);//キャッシュされたファイルが存在する場合は削除します
touch($this->lock_file);//存在しないファイルのアクセス時間を再度変更する
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。