久久久久在线观看_又色又爽又黄的免费视频播放_一区中文字幕_日韩电影在线播放

今日頭條 焦點資訊 營銷之道 企業報道 淘寶運營 網站建設 軟件開發 400電話
  當前位置: 首頁 » 資訊 » 軟件開發 » 正文

PHP對文件進行加鎖、解鎖操作的方法

放大字體  縮小字體 發布日期:2018-02-10  來源:企業800網  作者:新格網  瀏覽次數:515  【去百度看看】
在項目中,一般都用到日志,如數據庫查詢日志、訪問日志、對外接口請求返回參數日志,本文主要和大家紹了PHP實現對文件鎖進行加鎖、解鎖操作的方法,結合實例形式分析了PHP針對文件進行加鎖、解鎖操作的功能、實現方法與相關注意事項,需要的朋友可以參考下,希望能幫助到大家。


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

但這種寫法是由瑕疵的,一個網站同一時間并不是只有一個用戶訪問的,在多個用戶同時訪問時,就會出現問題,也就是多個進程使用同一個資源時,前一個進程寫到一半后面的進程便開始寫了,因此最后生成的日志就亂了。這種情況下,就用到鎖了,在文件加鎖期間,其他進程是不會修改文件的,只有當文件解鎖時,才可以操作。寫法如下


$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);

如果想測試下在文件加鎖期間其他進程操作不了文件的例子,可以用下面給出的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期間寫不進去
fclose($fp);
// 或是直接使用下面的這個例子,發現在sleep期間打印是個空值
//var_dump(file_get_contents($file));

測試時,先運行log.php,再運行test.php,會發現在sleep期間,test.php是執行達不到效果的。

相關推薦:

PHP通過加鎖實現并發搶購功能

實現MySQL語句加鎖的方法

Mysql高并發加鎖事務處理

以上就是PHP對文件進行加鎖、解鎖操作的方法的詳細內容,更多請關注php中文網其它相關文章!

 
關鍵詞: php,方法,操作
 
[ 資訊搜索 ]  [ 加入收藏 ]  [ 告訴好友 ]  [ 打印本文 ]  [ 違規舉報 ]  [ 關閉窗口 ]

 
0條 [查看全部]  相關評論

 
網站首頁 | 關于我們 | 聯系方式 | 使用協議 | 版權隱私 | 網站地圖 | 排名推廣 | 廣告服務 | 積分換禮 | 網站留言 | RSS訂閱 | 吉ICP備11001726號-6
企業800網 · 提供技術支持