文件鎖處機(jī)制
檔案鎖定處機(jī)制
檔案鎖定機(jī)制一般在單一開(kāi)啟檔案的時(shí)候根本看不到效果。這一塊的學(xué)習(xí)有一點(diǎn)抽象。
大家不要去思考怎麼實(shí)現(xiàn)的呀?
為什麼看不到效果呀?
答:因?yàn)殡娔X的操作太快了,基本上是毫秒的。所以這個(gè)實(shí)驗(yàn)其實(shí)是看不到效果的。
這一章了解檔案鎖定的基本概念即可,熟悉檔案鎖定函數(shù)和鎖定機(jī)制。
文件鎖的用途:
若一個(gè)人在寫(xiě)入一個(gè)文件,另外一個(gè)人同時(shí)也打了這個(gè)文件寫(xiě)入文件。
這情況下,如果遇到一定的碰撞機(jī)率的話,不知道到底誰(shuí)的操作為準(zhǔn)。
因此,這個(gè)時(shí)候我們引入鎖定機(jī)制。
若使用者A在寫(xiě)入或讀取這個(gè)檔案的時(shí)候,將檔案加上共用所。我可以讀,其他人也可以讀。
但是,我如果這與的時(shí)候。我使用獨(dú)佔(zhàn)鎖。這個(gè)文件歸我了,你們都別動(dòng),除非我將文件鎖進(jìn)行釋放。
注意:不論加上了檔案鎖定後要注意釋放。
我們來(lái)看看這個(gè)函數(shù):
bool flock ( resource $handle , int $operation)
功能:輕巧的諮詢文件鎖定
我們來(lái)看看鎖定類型:
#我們接下來(lái)把demo.txt加上一個(gè)獨(dú)佔(zhàn)鎖,進(jìn)行寫(xiě)入操作。
<?php $fp = fopen("demo.txt", "r+"); // 進(jìn)行排它型鎖定 if (flock($fp, LOCK_EX)) { fwrite($fp, "文件這個(gè)時(shí)候被我獨(dú)占了喲\n"); // 釋放鎖定 flock($fp, LOCK_UN); } else { echo "鎖失敗,可能有人在操作,這個(gè)時(shí)候不能將文件上鎖"; } fclose($fp); ?>
說(shuō)明:
1.???? 上例中我為了寫(xiě)入文件,把文件加上了獨(dú)佔(zhàn)鎖定。
2.???? 如果我操作完成,寫(xiě)入完成後,就解除了獨(dú)佔(zhàn)鎖定。
3.???? 若是讀取檔案的時(shí)候,大家可加上相同的處理想法加上共用鎖定。
?