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()锁定时不壅塞
实例1:A运用独有锁写文件,B读取文件,壅塞
a.php
<?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); ?>
b.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); ?>
先实行a.php,然后实行b.php
a获得独有锁,b只能守候,等a实行完消除锁定后才实行b,壅塞
实例2:A,B都运用同享锁,不壅塞
a.php
<?php $file = 'test.txt'; $fp = fopen($file, 'r'); if(flock($fp, LOCK_SH)){ // 获得同享锁 sleep(10); // sleep 10秒 while(!feof($fp)){ echo fread($fp, 100); } flock($fp, LOCK_UN); } fclose($fp); ?>
b.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); ?>
先实行a.php,然后实行b.php
b不须要守候a实行完就可以输出文件内容,非壅塞
实例3:A,B都运用独有锁写文件,壅塞
a.php
<?php $file = 'test.txt'; $fp = fopen($file, 'a'); 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); ?>
b.php
<?php $file = 'test.txt'; $fp = fopen($file, 'a'); if(flock($fp, LOCK_EX)){ // 获得独有锁 fwrite($fp, "How Are You\r\n"); // 写入数据 fwrite($fp, "Show Me The Money\r\n"); // 写入数据 flock($fp, LOCK_UN); // 解锁 } fclose($fp); ?>
先实行a.php,然后实行b.php
b须要守候a实行完,才写入数据,壅塞
实例4:LOCK_NB 锁定时不壅塞,不守候
a.php
<?php $file = 'test.txt'; $fp = fopen($file, 'a'); 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); ?>
b.php
<?php $file = 'test.txt'; $fp = fopen($file, 'a'); if(flock($fp, LOCK_EX|LOCK_NB)){ // 获得独有锁 fwrite($fp, "How Are You\r\n"); // 写入数据 fwrite($fp, "Show Me The Money\r\n"); // 写入数据 flock($fp, LOCK_UN); // 解锁 }else{ echo 'file locked'; } fclose($fp); ?>
先实行a.php,然后实行b.php
b取不到独有锁,不须要守候a实行完,而是直接返回取不到锁提醒,非壅塞
总结:
运用同享锁LOCK_SH,如果是读取,不须要守候,但如果是写入,须要守候读取完成。
运用独有锁LOCK_EX,不管写入/读取都须要守候。
LOCK_UN,不管运用同享/读占锁,运用完后须要解锁。
LOCK_NB,当被锁定时,不壅塞,而是提醒锁定。
本文解说了关于php flock 运用实例,更多相干内容请关注ki4网。
相干引荐:
php str_replace 替代指定次数要领 的解说
关于header,headers_sent,headers_list,header_remove 运用说明
经由过程PDO 查询mysql返回字段整型变成String型的解决要领
以上就是关于php flock 运用实例的解说的细致内容,更多请关注ki4网别的相干文章!