PHP文件锁函数flock()详细介绍


Posted in PHP onNovember 18, 2014

文件操作系统是在网络环境下完成的,可能有多个客户端用户在同一个时刻对服务器上的同一个文件访问。当这种并发访问产生时,很可能会破坏文件中。例如一个用户正在向文件中写入数据,当还没有写完时,其他用户在这一时刻也向这个文件中写数据,就会造成数据写入混乱。还有,当用户没有将数据写完时,其他用户就去获取这个文件中的内容,也会得到残缺的数据。

在PHP中提供了flock()函数,可以对文件使用锁定机制(锁定或释放文件)。当一个进程在访问文件时加上锁,其他进程要想对该文件进行访问,则必须等到锁定被释放以后。这样就可以避免在并发访问同一个文件时破坏数据。该函数的原型如下:

bool flock(int handle,int operation[,int&wouldblock])             //轻便的咨询文件锁定

第一个参数handle必须是一个已经打开的文件资源,第二个参数opeation也是必需的,规定使用哪种类型。operation可以是以下值之一:
★LOCK_SH取得共享锁定(从文件中读取数据时使用)。
★LOCK_EX取得独占锁定(向文件中写入数据时使用)。
★LOCK_UN释放锁定(无论共享或独占锁,都用它释放)。
★LOCK_NB附加锁定(如果不希望flock()在锁定时堵塞,则应在上述锁定后加上该锁)。

如果锁定会堵塞的话(已经被flock()锁定的文件,再次锁定时,flock()函数会被挂起,这时成为锁定堵塞),也可以将可选的第三个参数设定为1,则当进行锁定时会阻挡其他进程。锁定操作也可以被fclose()释放。为了让flock()函数发挥作用,在所有访问文件的程序中都必须使用相同的方式锁定文件。该函数如果成功则返回TRUE,失败则返回FALSE。

PHP 相关文章推荐
利用discuz自带通行证整合dedecms的方法以及文件下载
Mar 06 PHP
C# Assembly类访问程序集信息
Jun 13 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(五)
Jun 23 PHP
ThinkPHP中redirect用法分析
Dec 05 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
PHP数组与对象之间使用递归实现转换的方法
Jun 24 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
解析PHP之提取多维数组指定列的方法
Jan 03 PHP
PDO操作MySQL的基础教程(推荐)
Aug 18 PHP
Smarty模板配置实例简析
Jul 20 PHP
PHP大文件分块上传功能实例详解
Jul 22 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
Nov 18 #PHP
PHP操作文件的一些基本函数使用示例
Nov 18 #PHP
一个经典的PHP文件上传类分享
Nov 18 #PHP
php数组查找函数总结
Nov 18 #PHP
一个经典的PHP验证码类分享
Nov 18 #PHP
一个经典实用的PHP图像处理类分享
Nov 18 #PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 #PHP
You might like
不错的PHP学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
自己写的php中文截取函数mb_strlen和mb_substr
2015/02/09 PHP
php PDO异常处理详解
2016/11/20 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
JavaScript的变量作用域深入理解
2009/10/25 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
JQ技术实现注册页面带有校验密码强度
2015/07/27 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
Vue精简版风格概述
2018/01/30 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
Python中join和split用法实例
2015/04/14 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
python学生管理系统开发
2019/01/30 Python
python动态文本进度条的实例代码
2020/01/22 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
难忘的一天教学反思
2014/04/30 职场文书
2014年实习生工作总结
2014/11/27 职场文书
用Python的绘图库(matplotlib)绘制小波能量谱
2021/04/17 Python
Python Matplotlib绘制两个Y轴图像
2022/04/13 Python