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 相关文章推荐
php 上传文件类型判断函数(避免上传漏洞 )
Jun 08 PHP
理解php原理的opcodes(操作码)
Oct 26 PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 PHP
探讨PHP调用时间格式的参数详解
Jun 06 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
Apr 08 PHP
简单谈谈php中的unicode和utf8编码
Jun 10 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
Dec 29 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
ZendFramework2连接数据库操作实例
Apr 18 PHP
PHP-FPM和Nginx的通信机制详解
Feb 01 PHP
is_file和file_exists效率比较
Mar 14 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以及MYSQL日期比较方法
2012/11/29 PHP
php的dl函数用法实例
2014/11/06 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
Javascript json object 与string 相互转换的简单实现
2016/09/27 Javascript
实例分析浏览器中“JavaScript解析器”的工作原理
2016/12/12 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
js实现数字跳动到指定数字
2020/08/25 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
2020/12/04 Javascript
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
出纳会计岗位职责
2014/03/12 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
法制教育观后感
2015/06/17 职场文书
2016中秋节问候语
2015/11/11 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js