分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
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...