鎖機制之所以存在是因為並發導致的資源競爭,為了確保操作的有效性和完整性,可以通過鎖機制將並發狀態轉換成串行狀態。作為鎖機制中的一種,PHP的文件鎖也是為了應對資源競爭。假設一個應用場景,在存在較大並發的情況下,通過fwrite向文件尾部多次有序的寫入數據,不加鎖的情況下會發生什麼?多次有序的寫入操作相當於一個事務,我們此時需要保證這個事務的完整性。
如果我們有兩個程序同時向某個文件中寫入數據,為了保證數據的完整性,可以加一個文件鎖,先讓程序1執行,程序1執行完後,解鎖,再讓程序2執行。實現代碼如下:
代碼如下復制代碼
$fp=fopen('test.txt',"a");
$count= 10;
if(flock($fp, LOCK_EX)) {
for($i=1;$i<$count;$i++){
fwrite($fp,'text2_'.$i."rn");
echo"test2".date('h:i:s') . "
";
sleep(1);
echo"test2".date('h:i:s');
}
flock($fp, LOCK_UN);
}else{
echo"Couldn't lock the file !";
}
fclose($fp);