码迷,mamicode.com
首页 > 其他好文 > 详细

文件锁的玩法

时间:2017-07-26 23:39:53      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:class   进入   文件   故障   fopen   close   font   ace   file   

    群里大家一起交流:410028331 

文件锁的玩法


1、普通两个文件同一时候往一个文件里写入内容效果

index-1.php

<?php
$file = ‘temp.txt‘;
$fp = fopen($file,‘a‘);

 
for($i = 0;$i <10;$i++)
{
fwrite($fp, "11111111<br />");
sleep(1);
}
 
fclose($fp); 

?

>


index-2.php

<?php


$file = ‘temp.txt‘;
$fp = fopen($file,‘a‘); 
 
for($i = 0;$i <10;$i++)
{
fwrite($fp, "22222222<br />");

fclose($fp); 

?>

当同一时候运行后,(先1后2   要快立即运行两个)

进入temp.txt  会看到     11111111<br />11111111<br />22222222<br />22222222<br />22222222<br />22222222<br />22222222<br />11111111<br />11111111<br />11111111<br />

是混乱的。那么实际实现功能上就会出现故障。


?????????

那么这样的情况下。怎样实现并发对一个文件写入,而先来先写排序写入呢?

那么用到文件锁,这是一个非常好地选择

index-1.php改为

<?

php
$file = ‘temp.txt‘;
$fp = fopen($file,‘a‘);


if(flock($fp,LOCK_EX))
{
for($i = 0;$i <10;$i++)
{
fwrite($fp, "11111111<br />");
sleep(1);
}
flock($fp,LOCK_UN);
}
fclose($fp); 


index-2.php改为:

<?php


$file = ‘temp.txt‘;
$fp = fopen($file,‘a‘);


if(flock($fp,LOCK_EX))
{
for($i = 0;$i <10;$i++)
{
fwrite($fp, "22222222<br />");
}
flock($fp,LOCK_UN);
}


fclose($fp); 


再去运行发现temp.txt中的结果是这种(先1立即2,由于1有sleep会运行一段时间,仅仅要能保证1未完就运行了2就可以)  

结果:   11111111<br />11111111<br /> ...   22222222<br />...

也就是1运行完了后运行的2

文件锁的玩法

标签:class   进入   文件   故障   fopen   close   font   ace   file   

原文地址:http://www.cnblogs.com/yutingliuyl/p/7242191.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!