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 相关文章推荐
echo, print, printf 和 sprintf 区别
Dec 06 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
在Linux系统下一键重新安装WordPress的脚本示例
Jun 30 PHP
使用PHP接受文件并获得其后缀名的方法
Aug 05 PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 PHP
php实现遍历文件夹的方法汇总
Mar 02 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
Sep 16 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 PHP
Laravel统计一段时间间隔的数据方法
Oct 09 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 PHP
Swoole扩展的6种模式深入详解
Mar 04 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+ajax实现无刷新动态加载数据技术
2015/04/28 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
Zend Framework前端控制器用法示例
2016/12/11 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
jquery插件制作 自增长输入框实现代码
2012/08/17 jQuery
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
javascript实现获取浏览器版本、浏览器类型
2015/12/02 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
浅析js绑定事件的常用方法
2016/05/15 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
JS扩展类,克隆对象与混合类实例分析
2016/11/26 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
详解Vue底部导航栏组件
2019/05/02 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
[01:30]DOTA2上海特锦赛现场采访 Loda倾情献唱
2016/03/25 DOTA
python 将有序数组转换为二叉树的方法
2019/03/26 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
python redis 批量设置过期key过程解析
2019/11/26 Python
教师绩效工资方案
2014/02/01 职场文书
土地租赁意向书
2014/07/30 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
2016七夕情人节感言
2015/12/09 职场文书
Python加密与解密模块hashlib与hmac
2022/06/05 Python