首頁 >後端開發 >PHP問題 >PHP檔案處理之檔鎖的疑問解答

PHP檔案處理之檔鎖的疑問解答

WBOY
WBOY原創
2021-11-02 18:00:442289瀏覽

在先前的文章《PHP中怎樣刪除一個目錄(實例詳解)》中詳細的介紹了PHP中刪除目錄的相關知識,其中刪除一個非空的目錄稍微複雜些。這篇文章我們來看看PHP檔案鎖定的相關知識,希望對大家有幫助!

PHP檔案處理之檔鎖的疑問解答

在之前的文章中我們已經了解了很多的檔案處理相關知識,例如寫入檔案、讀取檔案等等操作,其中有一個東西叫做檔案鎖。關於文件鎖的理解可能會有些抽象,因為文件鎖的機制一般在打開文件的時候是看不到效果的。

那檔案鎖到底是什麼東西?他是用來做什麼的?我們為什麼要使用文件鎖?我們要怎樣去使用它?帶著這些疑問下面就讓我們來看看文件鎖的相關知識吧。

什麼是檔案鎖定?

首先的一個問題,簡單來說,檔案鎖定就是一種檔案保護機制,可以理解為當你在讀取或寫入這個檔案的時候,也就是已經有一位在進行對該文件進行操作的時候,文件的一種保護機制,為例避免在文件被操作期間被另一個進行操作。

檔案鎖定的用途

一個檔案有檔案鎖定的話,當我在使用這個檔案的時候,只有我能夠對該文件進行操作,除非將這個文件鎖定釋放,否則別人就沒辦法插手我對該文件的操作。同一時段只能夠允許一人進行操作,防止資料錯誤。

若是沒有文件鎖,出現多個人員操作同一個文件,極有可能會造成資料的錯誤或不對等,因此使用文件鎖是必要的。這就是文件所得用途以及為什麼要使用文件鎖。

怎麼去使用檔案鎖定:flock()函數

#接下來我們來看看怎麼去使用這個PHP檔案鎖,首先我們需要知道,我們在開啟檔案後可以透過flock()函數來對檔案進行上鎖。

flock()函數的基本語法格式如下:

flock(resource $handle, int $operation[, int &$wouldblock])

其中需要注意的是:

參數$handle表示的是檔案系統的指針,也就是透過fopen()建立的檔案資源;參數$operation表示的是文件鎖定類型;參數$wouldblock是一個可選參數,他表示的是可以將其設為1true,這樣的話檔案鎖定時就會堵塞其它進程。

#下面我們來介紹一下參數$operation的型別:

  • LOCK_EX表示的是寫鎖,也就是在寫入的時候是寫鎖狀態,其他人不能寫也沒法讀,只有等解鎖後才能恢復。

  • LOCK_SH表示的是共享鎖,理解為別人只能讀,但沒法寫。解鎖後回覆。

  • LOCK_UN表示的是解除上面兩個狀態。也就是解鎖。

  • LOCK_NB表示的是讀取或寫入的時後,當檔案鎖住了,就會馬上回傳通知訪問的文件被鎖住了。

接下來我們透過範例來看一下,範例如下:

<?php
header("Content-Type: text/html;charset=utf-8");    //设置字符编码
$file = "test.txt";
$handle = fopen($file,&#39;w+&#39;); //打开文件
if(flock($handle, LOCK_EX|LOCK_NB)){  //给文件上锁
    fwrite($handle, &#39;被锁住了&#39;);  //写入数据
    flock($handle, LOCK_UN);  //释放文件锁
}else{
    echo "锁失败了";
}
fclose($handle);//关闭文件
readfile($file);//读取文件内容
?>

輸出結果:

PHP檔案處理之檔鎖的疑問解答

test.txt內被寫入了資料:

PHP檔案處理之檔鎖的疑問解答

由上述範例我們便完成了對檔案進行檔案鎖定的操作,操作完成後使用fclose()函數來關閉檔案;然後透過readfile()函數讀取檔案內容。其中要注意的是:

當我們使用flock()函數,就是對檔案進行了加鎖,想要讓檔案自動解鎖,只需要呼叫fclose()函數就可以了。在我們寫程式碼的時候在使用檔案鎖之後還是加上解鎖語句為好。

大家如果有興趣的話,可以點選《PHP影片教學》進行更多關於PHP知識的學習。

以上是PHP檔案處理之檔鎖的疑問解答的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn