简单谈谈 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 PDOStatement:bindParam插入数据错误问题分析

废话不多说, 直接看代码:复制代码 代码如下:<?php$dbh = new PDO('mysql:host=localhost;dbname=test', "test");$qu...

php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例

本文实例讲述了php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8用法。分享给大家供大家参考,具体如下: /* *gb2312中文字符串截...

php实现遍历文件夹的方法汇总

php 遍历 文件夹 ,不少时候还是很需要的 /*获取所有文件*/ function get_all_files( $path ){ $list = array(); for...

PHP实现数字补零功能的2个函数介绍

在PHP中至少有两个函数能够帮助我们快速实现数字补零:首先是PHP str_pad函数:复制代码 代码如下:#str_pad — 使用另一个字符串填充字符串为指定长度顾名思义这个函数是针...

php中的单引号、双引号和转义字符详解

PHP单引号及双引号均可以修饰字符串类型的数据,如果修饰的字符串中含有变量(例$name);最大的区别是: 双引号会替换变量的值,而单引号会把它当做字符串输出。 例如: <&#...