在先前的文章《PHP中怎樣刪除一個目錄(實例詳解)》中詳細的介紹了PHP中刪除目錄的相關知識,其中刪除一個非空的目錄稍微複雜些。這篇文章我們來看看PHP檔案鎖定的相關知識,希望對大家有幫助!
在之前的文章中我們已經了解了很多的檔案處理相關知識,例如寫入檔案、讀取檔案等等操作,其中有一個東西叫做檔案鎖。關於文件鎖的理解可能會有些抽象,因為文件鎖的機制一般在打開文件的時候是看不到效果的。
那檔案鎖到底是什麼東西?他是用來做什麼的?我們為什麼要使用文件鎖?我們要怎樣去使用它?帶著這些疑問下面就讓我們來看看文件鎖的相關知識吧。
什麼是檔案鎖定?
首先的一個問題,簡單來說,檔案鎖定就是一種檔案保護機制,可以理解為當你在讀取或寫入這個檔案的時候,也就是已經有一位在進行對該文件進行操作的時候,文件的一種保護機制,為例避免在文件被操作期間被另一個進行操作。
檔案鎖定的用途
一個檔案有檔案鎖定的話,當我在使用這個檔案的時候,只有我能夠對該文件進行操作,除非將這個文件鎖定釋放,否則別人就沒辦法插手我對該文件的操作。同一時段只能夠允許一人進行操作,防止資料錯誤。
若是沒有文件鎖,出現多個人員操作同一個文件,極有可能會造成資料的錯誤或不對等,因此使用文件鎖是必要的。這就是文件所得用途以及為什麼要使用文件鎖。
怎麼去使用檔案鎖定:flock()
函數
#接下來我們來看看怎麼去使用這個PHP檔案鎖,首先我們需要知道,我們在開啟檔案後可以透過flock()函數來對檔案進行上鎖。
flock()
函數的基本語法格式如下:
flock(resource $handle, int $operation[, int &$wouldblock])
其中需要注意的是:
參數$handle
表示的是檔案系統的指針,也就是透過fopen()
建立的檔案資源;參數$operation
表示的是文件鎖定類型;參數$wouldblock
是一個可選參數,他表示的是可以將其設為1
或true
,這樣的話檔案鎖定時就會堵塞其它進程。
#下面我們來介紹一下參數$operation的型別:
LOCK_EX
表示的是寫鎖,也就是在寫入的時候是寫鎖狀態,其他人不能寫也沒法讀,只有等解鎖後才能恢復。
LOCK_SH
表示的是共享鎖,理解為別人只能讀,但沒法寫。解鎖後回覆。
LOCK_UN
表示的是解除上面兩個狀態。也就是解鎖。
LOCK_NB
表示的是讀取或寫入的時後,當檔案鎖住了,就會馬上回傳通知訪問的文件被鎖住了。
接下來我們透過範例來看一下,範例如下:
<?php header("Content-Type: text/html;charset=utf-8"); //设置字符编码 $file = "test.txt"; $handle = fopen($file,'w+'); //打开文件 if(flock($handle, LOCK_EX|LOCK_NB)){ //给文件上锁 fwrite($handle, '被锁住了'); //写入数据 flock($handle, LOCK_UN); //释放文件锁 }else{ echo "锁失败了"; } fclose($handle);//关闭文件 readfile($file);//读取文件内容 ?>
輸出結果:
test.txt內被寫入了資料:
由上述範例我們便完成了對檔案進行檔案鎖定的操作,操作完成後使用fclose()函數來關閉檔案;然後透過readfile()函數讀取檔案內容。其中要注意的是:
當我們使用flock()函數,就是對檔案進行了加鎖,想要讓檔案自動解鎖,只需要呼叫fclose()函數就可以了。在我們寫程式碼的時候在使用檔案鎖之後還是加上解鎖語句為好。
大家如果有興趣的話,可以點選《PHP影片教學》進行更多關於PHP知識的學習。
以上是PHP檔案處理之檔鎖的疑問解答的詳細內容。更多資訊請關注PHP中文網其他相關文章!