简单谈谈 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垃圾回收机制对内存泄露的处理

上次说到了refcount和is_ref,这里来说说内存泄露的情况复制代码 代码如下:$a = array(1, 2, &$a);unset($a);在老的PHP版本中,这里就会出现内存...

10个php函数实用却不常见

1. sys_getloadavg() sys_getloadavt()可以获得系 统负载情况。该函数返回一个包含三个元素的数组,每个元素分别代表系统再过去的1、5和15分钟内的平均负载...

支持数组的ADDSLASHES的php函数

复制代码 代码如下://SQL ADDSLASHES function saddslashes($string) { if(is_array($string)) { foreach($s...

批量获取memcache值并按key的顺序返回的实现代码

通过memcached的getMulti函数来批量获取如下15个ID的值。 31639,33878,177410,9735,589,12076,25953,22447,15368,153...

php反射类ReflectionClass用法分析

本文实例讲述了php反射类ReflectionClass用法。分享给大家供大家参考,具体如下: 先来看一段代码: /** * @name PHP反射API--利用反射技术实现的插件...