欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP實(shí)現(xiàn)對(duì)文件鎖進(jìn)行加鎖、解鎖操作的方法

 更新時(shí)間:2017年07月04日 08:56:14   作者:molaifeng  
這篇文章主要介紹了PHP實(shí)現(xiàn)對(duì)文件鎖進(jìn)行加鎖、解鎖操作的方法,結(jié)合實(shí)例形式分析了PHP針對(duì)文件進(jìn)行加鎖、解鎖操作的功能、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了PHP實(shí)現(xiàn)對(duì)文件鎖進(jìn)行加鎖、解鎖操作的方法。分享給大家供大家參考,具體如下:

在項(xiàng)目中,一般都用到日志,如數(shù)據(jù)庫(kù)查詢(xún)?nèi)罩?、訪問(wèn)日志、對(duì)外接口請(qǐng)求返回參數(shù)日志,在處理日志時(shí)簡(jiǎn)單的寫(xiě)法如下

$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  die("The $file is not writable!");
}
fwrite($fp, 'here');
fclose($fp);

但這種寫(xiě)法是由瑕疵的,一個(gè)網(wǎng)站同一時(shí)間并不是只有一個(gè)用戶(hù)訪問(wèn)的,在多個(gè)用戶(hù)同時(shí)訪問(wèn)時(shí),就會(huì)出現(xiàn)問(wèn)題,也就是多個(gè)進(jìn)程使用同一個(gè)資源時(shí),前一個(gè)進(jìn)程寫(xiě)到一半后面的進(jìn)程便開(kāi)始寫(xiě)了,因此最后生成的日志就亂了。這種情況下,就用到鎖了,在文件加鎖期間,其他進(jìn)程是不會(huì)修改文件的,只有當(dāng)文件解鎖時(shí),才可以操作。寫(xiě)法如下

$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  exit("The $file is not writable!");
}
flock($fp, LOCK_EX);// 加鎖
fwrite($fp, 'here');
flock($fp, LOCK_UN);// 解鎖
fclose($fp);

如果想測(cè)試下在文件加鎖期間其他進(jìn)程操作不了文件的例子,可以用下面給出的demo

log.php

$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  exit("The $file is not writable!");
}
flock($fp, LOCK_EX);
fwrite($fp, 'here');
sleep(10);
flock($fp, LOCK_UN);
fclose($fp);

test.php

$file = 'lock.txt';
$fp = fopen($file, 'a');
fwrite($fp, 'good'); // 在sleep期間寫(xiě)不進(jìn)去
fclose($fp);
// 或是直接使用下面的這個(gè)例子,發(fā)現(xiàn)在sleep期間打印是個(gè)空值
//var_dump(file_get_contents($file));

測(cè)試時(shí),先運(yùn)行l(wèi)og.php,再運(yùn)行test.php,會(huì)發(fā)現(xiàn)在sleep期間,test.php是執(zhí)行達(dá)不到效果的。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《php文件操作總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論