PHP實(shí)現(xiàn)對文件鎖進(jìn)行加鎖、解鎖操作的方法
本文實(shí)例講述了PHP實(shí)現(xiàn)對文件鎖進(jìn)行加鎖、解鎖操作的方法。分享給大家供大家參考,具體如下:
在項(xiàng)目中,一般都用到日志,如數(shù)據(jù)庫查詢?nèi)罩尽⒃L問日志、對外接口請求返回參數(shù)日志,在處理日志時簡單的寫法如下
$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
die("The $file is not writable!");
}
fwrite($fp, 'here');
fclose($fp);
但這種寫法是由瑕疵的,一個網(wǎng)站同一時間并不是只有一個用戶訪問的,在多個用戶同時訪問時,就會出現(xiàn)問題,也就是多個進(jìn)程使用同一個資源時,前一個進(jìn)程寫到一半后面的進(jìn)程便開始寫了,因此最后生成的日志就亂了。這種情況下,就用到鎖了,在文件加鎖期間,其他進(jìn)程是不會修改文件的,只有當(dāng)文件解鎖時,才可以操作。寫法如下
$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);
如果想測試下在文件加鎖期間其他進(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期間寫不進(jìn)去 fclose($fp); // 或是直接使用下面的這個例子,發(fā)現(xiàn)在sleep期間打印是個空值 //var_dump(file_get_contents($file));
測試時,先運(yùn)行l(wèi)og.php,再運(yùn)行test.php,會發(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常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php中自定義函數(shù)dump查看數(shù)組信息類似var_dump
本文為大家介紹下在php中自定義函數(shù)dump查看數(shù)組信息,具體示例如下,希望對大家有所幫助2014-01-01
php在apache環(huán)境下實(shí)現(xiàn)gzip配置方法
這篇文章主要介紹了php在apache環(huán)境下實(shí)現(xiàn)gzip配置方法,較為詳細(xì)的分析了相關(guān)配置文件的修改技巧,非常具有實(shí)用價值,需要的朋友可以參考下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)思路
涉及搶購、秒殺、抽獎、搶票等活動時,為了避免超賣,那么庫存數(shù)量是有限的,但是如果同時下單人數(shù)超過了庫存數(shù)量,就會導(dǎo)致商品超賣問題。那么我們怎么來解決這個問題呢,我的思路如下2017-04-04
PHP中register_shutdown_function函數(shù)的基礎(chǔ)介紹與用法詳解
php中的異常捕獲沒有java的強(qiáng)大,有些情況下,需要知道某段php程序業(yè)務(wù)是否正常執(zhí)行完,可以用register_shutdown_function函數(shù)來輔助實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于PHP中register_shutdown_function函數(shù)的基礎(chǔ)介紹與用法的相關(guān)資料,需要的朋友可以參考。2017-11-11

