您好,登錄后才能下訂單哦!
之前面試拼多多的時候記得提到過文件鎖這樣的一個概念。當時并不知道是什么。今天工作了,遇到過數據庫鎖,MC鎖,今天又偶爾發現了PHP自帶的文件鎖。flock
http://php.net/manual/zh/function.flock.php
bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
flock() 允許執行一個簡單的可以在任何平臺中使用的讀取/寫入模型(包括大部分的 Unix 派生版和甚至是 Windows)。
在 PHP 5.3.2版本之前,鎖也會被 fclose() 釋放(在腳本結束后會自動調用)。
PHP 支持以咨詢方式(也就是說所有訪問程序必須使用同一方式鎖定, 否則它不會工作)鎖定全部文件的一種輕便方法。 默認情況下,這個函數會阻塞到獲取鎖;這可以通過下面文檔中 LOCK_NB 選項來控制(在非 Windows 平臺上)。
handle
文件系統指針,是典型地由 fopen() 創建的 resource(資源)。
operation
operation 可以是以下值之一:
LOCK_SH取得共享鎖定(讀取的程序)。
LOCK_EX 取得獨占鎖定(寫入的程序。
LOCK_UN 釋放鎖定(無論共享或獨占)。
如果不希望 flock() 在鎖定時堵塞,則是 LOCK_NB(Windows 上還不支持)。
wouldblock
如果鎖定會堵塞的話(EWOULDBLOCK 錯誤碼情況下),可選的第三個參數會被設置為 TRUE。(Windows 上不支持)
返回值 ?
成功時返回 TRUE, 或者在失敗時返回 FALSE。
<?php
$fp = fopen('./a.lock','r');
if(flock($fp,LOCK_EX)){
echo date("Y-m-d H:i:s",time());
sleep(10);
flock($fp,LOCK_UN);
}else {
echo "LOCKing.........";
}
fclose($fp);
這是獨占鎖,誰搶到了,別就只能阻塞等待結束了。
<?php
$fp = fopen('./a.lock','r');
if(flock($fp,LOCK_EX | LOCK_NB)){
echo date("Y-m-d H:i:s",time());
sleep(10);
flock($fp,LOCK_UN);
}else {
echo "LOCKing.........";
}
fclose($fp);
如果不想阻塞等待,可以用LOCK_NB 直接返回else中的內容
<?php
$fp = fopen('./a.lock','r');
if(flock($fp,LOCK_SH)){
echo date("Y-m-d H:i:s",time());
sleep(10);
flock($fp,LOCK_UN);
}else {
echo "LOCKing.........";
}
fclose($fp);
這里是共享鎖,可以一起讀寫。。。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。