php flock 獨佔使用

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

flock()允許執行一個簡單的可以在任何平臺中使用的讀取/寫入模型(包括大部分的Unix派生版和windows)
在PHP 5.3.2版本之前,鎖會被 fclose() 釋放(在腳本結束後會自動調用),現在需要手動解鎖


operation
1.LOCK_SH 取得共享鎖(讀取的程序)
2.LOCK_EX 取得獨佔鎖(寫入的程序)
3.LOCK_UN 釋放鎖定 (無論共享或獨佔)
4.LOCK_NB 在flock()鎖定時不阻塞) 與LOCK_EX使用時,不阻塞,直接返回

下面是模擬兩個請求使用flock來防止IO獨佔的例子:
test1.php:
$file = 'test.txt';

$fp = fopen($file, 'w');

if(flock($fp, LOCK_EX)){            // 取得獨佔鎖
    fwrite($fp, "Hello World\r\n"); // 寫入數據
    sleep(10);                      // sleep 10秒,文件被鎖定
    fwrite($fp, "Hello PHP\r\n");   // 寫入數據
    flock($fp, LOCK_UN);            // 解鎖
}

fclose($fp);

test2.php:
<?php
$file = 'test.txt';

$fp = fopen($file, 'r');

if(flock($fp, LOCK_SH)){ // 取得貢獻鎖
    while(!feof($fp)){
        echo fread($fp, 100);
    }
    flock($fp, LOCK_UN);
}

fclose($fp);
?>

先執行test1.php,10秒內執行執行test2.php;test1.php獨佔,必須等到test1.php執行完後,test2.php才能執行。阻塞



參考:1.http://www.cnblogs.com/web-lover/archive/2012/01/23/2615949.html
2.http://blog.csdn.net/fdipzone/article/details/43839851#
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章