由于 flock() 需要一個文件指針,因此可能不得不用一個特殊的鎖定文件來保護打算通過寫模式打開的文件的訪問(在 fopen() 函數中加入 ///"w///" 或 ///"w+///"),實例代碼如下:
- fp = fopen("test.txt", 'ab'); //from the end
- flock($fp, lock_ex); //lock the file for waiting...
- fwrite($fp, 'just a test string.......'); //start writing...
- flock($fp, lock_un); //release write lock
- fclose($fp); //close the file讀操作:
- //read
- $fp = fopen("test.txt", 'r');
- flock($fp, lock_sh);
- //read from the file.......
- flock($fp, lock_un);
- <?php
- $fp = fopen("/tmp/lock.txt", "w+");
- if (flock($fp, lock_ex)) { // 進行排它型鎖定
- fwrite($fp, "write something here ");
- flock($fp, lock_un); // 釋放鎖定
- } else {
- echo "couldn't lock the file !";
- }//開源軟件:Vevb.com
- fclose($fp);
- ?>
flock() 不能用于 nfs 以及其它一些網絡文件系統,詳細資料查看自己操作系統的文檔,在部分操作系統中 flock() 以進程級實現,當用一個多線程服務器 api,比如 isapi時,可能不可以依靠 flock() 來保護文件,因為運行于同一服務器實例中其它并行線程的 php 腳本可以對該文件進行處理.
新聞熱點
疑難解答