php flock 使用例項

2021-08-31 19:52:17 字數 2277 閱讀 4399

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

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()鎖定時不阻塞

a.php

<?php $file = 'test.txt';$fp = fopen($file, 'w');if(flock($fp, lock_ex))fclose($fp);?>
b.php

<?php $file = 'test.txt';$fp = fopen($file, 'r');if(flock($fp, lock_sh))    flock($fp, lock_un);}fclose($fp);?>
先執行a.php,然後執行b.php

a取得獨佔鎖,b只能等待,等a執行完解除鎖定後才能執行b,阻塞

a.php

<?php $file = 'test.txt';$fp = fopen($file, 'r');if(flock($fp, lock_sh))    flock($fp, lock_un);}fclose($fp);?>
b.php

<?php $file = 'test.txt';$fp = fopen($file, 'r');if(flock($fp, lock_sh))    flock($fp, lock_un);}fclose($fp);?>
先執行a.php,然後執行b.php

b不需要等待a執行完就能輸出檔案內容,非阻塞

a.php

<?php $file = 'test.txt';$fp = fopen($file, 'a');if(flock($fp, lock_ex))fclose($fp);?>
b.php

<?php $file = 'test.txt';$fp = fopen($file, 'a');if(flock($fp, lock_ex))fclose($fp);?>
先執行a.php,然後執行b.php

b需要等待a執行完,才能寫入資料,阻塞

a.php

<?php $file = 'test.txt';$fp = fopen($file, 'a');if(flock($fp, lock_ex))fclose($fp);?>
b.php

<?php $file = 'test.txt';$fp = fopen($file, 'a');if(flock($fp, lock_ex|lock_nb))elsefclose($fp);?>
先執行a.php,然後執行b.php

b取不到獨佔鎖,不需要等待a執行完,而是直接返回取不到鎖提示,非阻塞

總結:

使用共享鎖lock_sh,如果是讀取,不需要等待,但如果是寫入,需要等待讀取完成。

使用獨佔鎖lock_ex,無論寫入/讀取都需要等待。

lock_un,無論使用共享/讀佔鎖,使用完後需要解鎖。

lock_nb,當被鎖定時,不阻塞,而是提示鎖定。

給我老師的人工智慧教程打call!

PHP flock檔案IO鎖的使用

一 flock概述 bool flock resource handle int operation int wouldblock 引數handle 檔案的指標,由 fopen 建立的 resource 資源 operation operation 可以是以下其中乙個值 1.lock sh 取得共享...

PHP flock 檔案鎖詳細介紹

flock php 4,php 5 flock 輕便的諮詢檔案鎖定 說明 bool flock int handle int operation int wouldblock php 支援以諮詢方式 也就是說所有訪問程式必須使用同一方式鎖定,否則它不會工作 鎖定全部檔案的一種輕便方法。note 在 ...

mysql 使用例項 MySQL使用例項

誤刪除了vps上的phpmyadmin,不得已翻閱了半天mysql指南,以下是一些mysql使用例項 連線管理 鏈結資料庫 mysql h localhost u root p 退出資料庫 mysql quit 資料庫管理 檢視資料庫 mysql show databases 建立資料庫 mysql...