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 相关文章推荐
dedecms模板标签代码官方参考
Mar 17 PHP
PHP循环获取GET和POST值的代码
Apr 09 PHP
PHP 反射机制实现动态代理的代码
Oct 22 PHP
PHP 读取文件内容代码(txt,js等)
Dec 06 PHP
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
Jun 21 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 PHP
php 获取百度的热词数据的代码
Feb 18 PHP
php中用socket模拟http中post或者get提交数据的示例代码
Aug 08 PHP
PHPMailer的主要功能特点和简单使用说明
Feb 17 PHP
php判断两个日期之间相差多少个月份的方法
Jun 18 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 PHP
PHP7移除的扩展和SAPI
Mar 09 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
Php header()函数语法及使用代码
2013/11/04 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
jQuery 使用个人心得
2009/02/26 Javascript
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
2010/03/02 Javascript
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
javascript校验价格合法性实例(必须输入2位小数)
2014/05/05 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
jQuery获取上传文件的名称的正则表达式
2015/05/21 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
2015/09/06 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
解决Vue使用bus总线时,第一次路由跳转时数据没成功传递问题
2020/07/28 Javascript
对于Python的框架中一些会话程序的管理
2015/04/20 Python
Python聊天室实例程序分享
2016/01/05 Python
Python 备份程序代码实现
2017/03/06 Python
python opencv之分水岭算法示例
2018/02/24 Python
pandas按若干个列的组合条件筛选数据的方法
2018/04/11 Python
Django如何将URL映射到视图
2019/07/29 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
国际化的太阳镜及太阳镜配件零售商:Sunglass Hut
2016/07/26 全球购物
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
工程造价管理专业大专生求职信
2013/10/06 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
世界名著读书笔记
2015/06/25 职场文书
年终工作总结范文
2019/06/20 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL
Python语言内置数据类型
2022/02/24 Python