php 使用flock解决文件并发读写冲突的问题
时间:2016-08-16
在文件读写过程中,可能会被多个人读写操作,这个时候我们需要考虑一个问题,在文件进行并发操作时,如果不对文件的访问进行相应的独占,就容易造成数据丢失,而flock函数正好可以解决文件并发操作的问题。
为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态。作为锁机制中的一种,PHP的文件锁也是为了应对资源竞争。假设一个应用场景,在存在较大并发的情况下,通过fwrite向文件尾部多次有序的写入数据,不加锁的情况下会发生什么?多次有序的写入操作相当于一个事务,我们此时需要保证这个事务的完整性。
高效且保护文件在使用过程中受保护的写法是这样的【推荐】:
$fp = fopen('product.csv', 'cb');
flock($fp, LOCK_EX | LOCK_NB);
fwrite($fp, "title1, title2\n");
//fputcsv($fp, array('title1', 'title2'));
for($p = 1; $p <= 100000; $p++){
fwrite($fp, "content1, content2\n");
//fputcsv($fp, array('content1', 'content2'));
}
/* http://www.manongjc.com/article/1358.html */
flock($fp, LOCK_UN);
fclose($fp);
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC