简单谈谈 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中时间轴开发(刚刚、5分钟前、昨天10:23等)

其实这个没什么技术含量,当然就直接贴代码,不废话了, 但是在其实开发中还是蛮有用的,譬如论坛帖子,围脖等都有相关应用 复制代码 代码如下: function tranTime($time...

php数组的一些常见操作汇总

数组求和 给定一个含有n个元素的整型数组a,求a中所有元素的和。可能您会觉得很简单,是的,的确简单,但是为什么还要说呢,原因有二,第一,这道题要求用递归法,只用一行代码。第二,这是我人生...

深入PHP5中的魔术方法详解

从PHP 5以后的版本,PHP中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法。 1、_...

php ss7.5的数据调用 (笔记)

php ss7.5的数据调用 (笔记)

这几天搞 ss7.5 dz7.2 uc1.5 uchome2.0和自己主站的整合 头都大了 呵呵  好歹是弄的差不多 了 呵呵 记录一下 ss7.5的数据调用  ...

PHP的HTTP客户端Guzzle简单使用方法分析

PHP的HTTP客户端Guzzle简单使用方法分析

本文实例讲述了PHP的HTTP客户端Guzzle简单使用方法。分享给大家供大家参考,具体如下: 首先来一段官方文档对Guzzle的介绍: 然后cd到网站根目录,执行Composer命令...