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 相关文章推荐
杏林同学录(五)
Oct 09 PHP
php $_ENV为空的原因分析
Jun 01 PHP
php下连接mssql2005的代码
Jan 17 PHP
PHP通用检测函数集合
Feb 08 PHP
PHP session有效期session.gc_maxlifetime
Apr 20 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
thinkphp命名空间用法实例详解
Dec 30 PHP
微信支付开发动态链接Native支付
Jul 12 PHP
mac os快速切换多个PHP版本的方法
Mar 07 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
Apr 18 PHP
PHP如何实现订单的延时处理详解
Dec 30 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 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
3种平台下安装php4经验点滴
2006/10/09 PHP
php实现cookie加密的方法
2015/03/10 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
js正确获取元素样式详解
2009/08/07 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
预加载css或javascript的js代码
2010/04/23 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
jquery实现商品拖动选择效果代码(自写)
2013/05/28 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
JavaScript获取服务器端时间的方法
2016/11/29 Javascript
Bootstrap基本插件学习笔记之轮播幻灯片(23)
2016/12/08 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
在Python程序中操作MySQL的基本方法
2015/07/29 Python
python语言使用技巧分享
2016/05/31 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
Django中login_required装饰器的深入介绍
2017/11/24 Python
基于Python log 的正确打开方式
2018/04/28 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
对Python3 序列解包详解
2019/02/16 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
python中的colorlog库使用详解
2019/07/05 Python
python增加图像对比度的方法
2019/07/12 Python
python pillow模块使用方法详解
2019/08/30 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
陈欧广告词
2014/03/14 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
Python基础之元组与文件知识总结
2021/05/19 Python
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB