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 高手之路(二)
Oct 09 PHP
php 什么是PEAR?
Mar 19 PHP
php缓冲 output_buffering的使用详解
Jun 13 PHP
Memcached常用命令以及使用说明详解
Jun 27 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
Laravel实现短信注册的示例代码
May 29 PHP
php实现微信发红包功能
Jul 13 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
PHP的PDO预定义常量讲解
Jan 24 PHP
解决laravel 出现ajax请求419(unknown status)的问题
Sep 03 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自定session保存路径及删除、注销与写入的方法
2014/11/18 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
通过继承IHttpHandle实现JS插件的组织与管理
2010/07/13 Javascript
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
JS 中可以提升幸福度的小技巧(可以识别更多另类写法)
2018/07/28 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
基于Vue CSR的微前端实现方案实践
2020/05/27 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
Python设计模式之观察者模式简单示例
2018/01/10 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
2019/08/05 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
联想新西兰官方网站:Lenovo New Zealand
2018/10/30 全球购物
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
中国梦演讲稿3分钟
2014/08/19 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书
Python内置数据结构列表与元组示例详解
2021/08/04 Python