PHP實(shí)現(xiàn)對(duì)文件鎖進(jìn)行加鎖、解鎖操作的方法
本文實(shí)例講述了PHP實(shí)現(xiàn)對(duì)文件鎖進(jìn)行加鎖、解鎖操作的方法。分享給大家供大家參考,具體如下:
在項(xiàng)目中,一般都用到日志,如數(shù)據(jù)庫(kù)查詢?nèi)罩尽⒃L問(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è)用戶訪問(wèn)的,在多個(gè)用戶同時(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)容感興趣的讀者可查看本站專題:《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ì)有所幫助。
- PHP 文件鎖與進(jìn)程鎖的使用示例
- 簡(jiǎn)單談?wù)?php 文件鎖
- PHP程序中的文件鎖、互斥鎖、讀寫(xiě)鎖使用技巧解析
- PHP文件鎖函數(shù)flock()詳細(xì)介紹
- PHP文件鎖定寫(xiě)入實(shí)例解析
- PHP flock 文件鎖詳細(xì)介紹
- PHP使用flock實(shí)現(xiàn)文件加鎖的方法
- PHP session文件獨(dú)占鎖引起阻塞問(wèn)題解決方法
- PHP對(duì)文件進(jìn)行加鎖、解鎖實(shí)例
- PHP多進(jìn)程編程實(shí)例
- 深入探究PHP的多進(jìn)程編程方法
- PHP基于文件鎖解決多進(jìn)程同時(shí)讀寫(xiě)一個(gè)文件問(wèn)題示例
相關(guān)文章
php中自定義函數(shù)dump查看數(shù)組信息類似var_dump
本文為大家介紹下在php中自定義函數(shù)dump查看數(shù)組信息,具體示例如下,希望對(duì)大家有所幫助2014-01-01
php在apache環(huán)境下實(shí)現(xiàn)gzip配置方法
這篇文章主要介紹了php在apache環(huán)境下實(shí)現(xiàn)gzip配置方法,較為詳細(xì)的分析了相關(guān)配置文件的修改技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
PHP中Static(靜態(tài))關(guān)鍵字功能與用法實(shí)例分析
這篇文章主要介紹了PHP中Static(靜態(tài))關(guān)鍵字功能與用法,結(jié)合實(shí)例形式分析了Static關(guān)鍵字功能、以及靜態(tài)屬性、靜態(tài)變量等相關(guān)使用技巧,需要的朋友可以參考下2019-04-04
關(guān)于php 高并發(fā)解決的一點(diǎn)思路
涉及搶購(gòu)、秒殺、抽獎(jiǎng)、搶票等活動(dòng)時(shí),為了避免超賣,那么庫(kù)存數(shù)量是有限的,但是如果同時(shí)下單人數(shù)超過(guò)了庫(kù)存數(shù)量,就會(huì)導(dǎo)致商品超賣問(wèn)題。那么我們?cè)趺磥?lái)解決這個(gè)問(wèn)題呢,我的思路如下2017-04-04
PHP中register_shutdown_function函數(shù)的基礎(chǔ)介紹與用法詳解
php中的異常捕獲沒(méi)有java的強(qiáng)大,有些情況下,需要知道某段php程序業(yè)務(wù)是否正常執(zhí)行完,可以用register_shutdown_function函數(shù)來(lái)輔助實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于PHP中register_shutdown_function函數(shù)的基礎(chǔ)介紹與用法的相關(guān)資料,需要的朋友可以參考。2017-11-11

