PHP文件锁定写入实例解析


Posted in PHP onJuly 14, 2014

本文以实例讲述了PHP文件写入方法,以应对多线程写入,具体代码如下:

function file_write($file_name, $text, $mode='a', $timeout=30){ 
  $handle = fopen($file_name, $mode); 
  while($timeout>0){ 
    if ( flock($handle, LOCK_EX) ) { // 排它性的锁定
      $timeout--; 
      sleep(1); 
    } 
  } 
  if ( $timeout > 0 ){ 
    fwrite($handle, $text.'\n'); 
    flock($handle, LOCK_UN); 
    fclose($handle); //释放锁定操作
    return true; 
  } 
  return false; 
}

其中flock(int $handle, int $operation)函数操作的 handle 必须是一个已经打开的文件指针。

operation 可以是以下值之一:

要取得共享锁定(读取的程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。
要取得独占锁定(写入的程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。
要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。
如果不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。

此外, fclose()用来释放锁定操作,在代码执行完毕时调用。

PHP 相关文章推荐
针对初学PHP者的疑难问答(1)
Oct 09 PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
Jan 02 PHP
PHP 图像尺寸调整代码
May 26 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
Aug 11 PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
ThinkPHP惯例配置文件详解
Jul 14 #PHP
2014年10个最佳的PHP图像操作库
Jul 14 #PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 #PHP
mantis安装、配置和使用中的问题小结
Jul 14 #PHP
kohana框架上传文件验证规则写法示例
Jul 14 #PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 #PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 #PHP
You might like
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
合格的PHP程序员必备技能
2015/11/13 PHP
PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash)
2016/03/10 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
jQuery插件FusionCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/06 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
[27:53]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS iG
2014/05/26 DOTA
Python中for循环控制语句用法实例
2015/06/02 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
pycharm中连接mysql数据库的步骤详解
2017/05/02 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
Python 实现OpenCV格式和PIL.Image格式互转
2020/01/09 Python
查看keras的默认backend实现方式
2020/06/19 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
struct与class的区别
2014/02/03 面试题
旅游与酒店管理专业求职信
2014/07/21 职场文书
争先创优公开承诺书
2014/08/30 职场文书
文案策划岗位职责
2015/02/11 职场文书
Win10鼠标轨迹怎么开 Win10显示鼠标轨迹方法
2022/04/06 数码科技