模擬flock實(shí)現(xiàn)文件鎖定
更新時(shí)間:2007年02月14日 00:00:00 作者:
主要提供了一種思路。
$lock0和$lock1就是文件鎖定的標(biāo)識(shí)符,當(dāng)文件被某一用戶(hù)打開(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就是起這樣的作用。
<?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!";
}
?>
$lock0和$lock1就是文件鎖定的標(biāo)識(shí)符,當(dāng)文件被某一用戶(hù)打開(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!";
}
?>
相關(guān)文章
PHP消息隊(duì)列實(shí)現(xiàn)及應(yīng)用詳解【隊(duì)列處理訂單系統(tǒng)和配送系統(tǒng)】
這篇文章主要介紹了PHP消息隊(duì)列實(shí)現(xiàn)及應(yīng)用,結(jié)合實(shí)例形式詳細(xì)分析了php消息隊(duì)列的概念、原理及隊(duì)列處理訂單系統(tǒng)和配送系統(tǒng)案例,需要的朋友可以參考下2019-05-05PHP依賴(lài)注入(DI)和控制反轉(zhuǎn)(IoC)詳解
這篇文章主要介紹了PHP依賴(lài)注入(DI)和控制反轉(zhuǎn)(IoC)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06本地計(jì)算機(jī)無(wú)法啟動(dòng)Apache故障處理
安裝了WMAP后,一直無(wú)法運(yùn)行成功。后發(fā)現(xiàn)Apache一直都不在運(yùn)行狀態(tài)。到WMAP中的Apache選項(xiàng)中去選擇啟動(dòng)但無(wú)法啟動(dòng)。下面總結(jié)下處理此問(wèn)題的幾種思路方法2014-08-08簡(jiǎn)單實(shí)現(xiàn)php上傳文件功能
這篇文章主要教大家如何簡(jiǎn)單實(shí)現(xiàn)php上傳文件功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09解析php中session的實(shí)現(xiàn)原理以及大網(wǎng)站應(yīng)用應(yīng)注意的問(wèn)題
本篇文章是對(duì)php中session的實(shí)現(xiàn)原理以及大網(wǎng)站應(yīng)用應(yīng)注意的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06