简单谈谈 php 文件锁

yipeiwu_com6年前PHP代码库

锁机制之所以存在是因为并发导致的资源竞争,为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态。作为锁机制中的一种,PHP的文件锁也是为了应对资源竞争。假设一个应用场景,在存在较大并发的情况下,通过fwrite向文件尾部多次有序的写入数据,不加锁的情况下会发生什么?多次有序的写入操作相当于一个事务,我们此时需要保证这个事务的完整性。

如果我们有两个程序同时向某个文件中写入数据,为了保证数据的完整性,可以加一个文件锁,先让程序1执行,程序1执行完后,解锁,再让程序2执行。实现代码如下:

$fp = fopen('test.txt',"a");
$count = 10;
if (flock($fp, LOCK_EX)) {
for($i=1;$i<$count;$i++){
fwrite($fp, 'text2_'.$i."rn");
echo "test2".date('h:i:s') . "
";
sleep(1); 
echo "test2".date('h:i:s');
}
flock($fp , LOCK_UN);
}else{
echo "Couldn't lock the file !";
}
fclose($fp);

相关文章

PHP使用CURL模拟登录的方法

网上的很多模拟登录程序,大都是通过服务程序apache之类的运行,获取到验证码之后显示在网页上,然后填上再POST出去,这样虽然看起来很友 好,但是既然模拟登录,登录后所干的事情就不一定...

php版本CKEditor 4和CKFinder安装及配置方法图文教程

php版本CKEditor 4和CKFinder安装及配置方法图文教程

本文实例讲述了php版本CKEditor 4和CKFinder安装及配置方法。分享给大家供大家参考,具体如下: 下载并解压CKEditor 4和CKFinder CKEditor 4下载...

php5.6.x到php7.0.x特性小结

本文总结分析了php5.6.x到php7.0.x特性。分享给大家供大家参考,具体如下: php5.6.x到php7.0.x特性 1.标量类型声明 字符串(string), 整数 (int...

PHP高级编程实例:编写守护进程

1.什么是守护进程 守护进程是脱离于终端并且在后台运行的进程。守护进程脱离于终端是为了避免进程在执行过程中的信息在任何终端上显示并且进程也不会被任何终端所产生的终端信息所打断。 例如 a...

PHP精确到毫秒秒杀倒计时实例详解

PHP精确到毫秒秒杀倒计时实例详解

精确到毫秒秒杀倒计时PHP源码实例,前台js活动展示倒计时,后台计算倒计时时间。每0.1秒定时刷新活动倒计时时间。 PHP: // 注意:php的时间是以秒算。js的时间以毫秒算...