|
$lock0和$lock1就是文件鎖定的標(biāo)識(shí)符,當(dāng)文件被某一用戶打開(kāi)的時(shí)候,$lock0和$lock1就會(huì)產(chǎn)生,當(dāng)該文件沒(méi)打開(kāi)則不存在。
其實(shí)最關(guān)鍵就是有個(gè)標(biāo)識(shí)符來(lái)表示當(dāng)前這個(gè)文件的狀態(tài), $lock0和$lock1就是起這樣的作用。
復(fù)制代碼 代碼如下:
<?php
// Lock a file, timing out if it takes too long.
function lock ($lock, $tries) {
$lock0 = ".{$lock}0";
$lock1 = ".{$lock}1";
for ($i=0; $i<$tries; $i++) {
if (!is_file($lock0)) {
touch($lock0);
if (!is_file($lock1)) {
touch($lock1);
return 1;
}
}
usleep(100);
}
return 0;
}
// Unlock a file.
function unlock ($lock) {
unlink(".{$lock}1");
unlink(".{$lock}0");
}
// Usage example.
$filename = "somefile";
$data = "stuff and thingsn";
$tries = 10;
if (lock($filename, $tries)) {
$h = fopen($filename, "a") or die();
fwrite($h, $data);
fclose($h);
/**
* 另外一個(gè)進(jìn)程寫(xiě)文件,檢查是否鎖定
*/
if (lock($filename, $tries)) {
$h2 = fopen($filename, "a") or die();
fwrite($h2,'check lock');
fclose($h2);
}else{
//die("Failed to lock $filename after ".($tries*100)." milliseconds!";
}
unlock($filename);
} else {
//die("Failed to lock $filename after ".($tries*100)." milliseconds!";
}
?>
php技術(shù):模擬flock實(shí)現(xiàn)文件鎖定,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。