模拟flock实现文件锁定


Posted in PHP onFebruary 14, 2007

主要提供了一种思路。
  $lock0和$lock1就是文件锁定的标识符,当文件被某一用户打开的时候,$lock0和$lock1就会产生,当该文件没打开则不存在。
  其实最关键就是有个标识符来表示当前这个文件的状态, $lock0和$lock1就是起这样的作用。

<?php   // Lock a file, timing out if it takes too long.   
function lock ($lock, $tries) {   
       $lock0 = ".{$lock}0";   
       $lock1 = ".{$lock}1";   
       for ($i=0; $i<$tries; $i++) {   
               if (!is_file($lock0)) {   
                       touch($lock0);   
                       if (!is_file($lock1)) {   
                               touch($lock1);   
                               return 1;   
                       }   
               }   
               usleep(100);   
       }   
       return 0;   
}   
// Unlock a file.   
function unlock ($lock) {   
       unlink(".{$lock}1");   
       unlink(".{$lock}0");   
}   
// Usage example.   
$filename = "somefile";   
$data = "stuff and thingsn";   
$tries = 10;   
if (lock($filename, $tries)) {   
       $h = fopen($filename, "a") or die();   
       fwrite($h, $data);   
       fclose($h);   
       /**   
         * 另外一个进程写文件,检查是否锁定   
       */   
       if (lock($filename, $tries)) {   
               $h2 = fopen($filename, "a") or die();   
               fwrite($h2,'check lock');   
               fclose($h2);   
        }else{   
            //die("Failed to lock $filename after ".($tries*100)." milliseconds!";   
        }   
        unlock($filename);   
} else {   
       //die("Failed to lock $filename after ".($tries*100)." milliseconds!";   
}   
?> 
PHP 相关文章推荐
PHP中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
兼容ie6浏览器的php下载文件代码分享
Jul 14 PHP
ThinkPHP权限认证Auth实例详解
Jul 22 PHP
对比分析php中Cookie与Session的异同
Feb 19 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
Apr 04 PHP
CI框架使用composer安装的依赖包步骤与方法分析
Nov 21 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
Nov 22 PHP
PHP数据库处理封装类实例
Dec 24 PHP
highchart数据源纵轴json内的值必须是int(详解)
Feb 20 PHP
Yii2.0 RESTful API 基础配置教程详解
Dec 26 PHP
PDO::setAttribute讲解
Jan 29 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 PHP
回答PHPCHINA上的几个问题:URL映射
Feb 14 #PHP
简单采集了yahoo的一些数据
Feb 14 #PHP
自己前几天写的无限分类类
Feb 14 #PHP
用PHPdig打造属于你自己的Google[图文教程]
Feb 14 #PHP
php中的一个中文字符串截取函数
Feb 14 #PHP
PHP音乐采集(部分代码)
Feb 14 #PHP
一个数据采集类
Feb 14 #PHP
You might like
解析php中反射的应用
2013/06/18 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
Javascript 继承实现例子
2009/08/12 Javascript
一些相见恨晚的 JavaScript 技巧
2010/04/25 Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
2012/01/15 Javascript
js 日期比较相关天数代码
2014/04/02 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
理解javascript封装
2016/02/23 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
Vue+iview+webpack ie浏览器兼容简单处理
2019/09/20 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
Vue-cli 移动端布局和动画使用详解
2020/08/10 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
详解JavaScript执行模型
2020/11/16 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
python将人民币转换大写的脚本代码
2013/02/10 Python
python实现的阳历转阴历(农历)算法
2014/04/25 Python
python的Template使用指南
2014/09/11 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
python unittest实现api自动化测试
2018/04/04 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
python 实现两个线程交替执行
2020/05/02 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
StubHub德国:购买和出售门票
2017/09/06 全球购物
波兰在线杂货店:Polski Koszyk
2019/11/02 全球购物
某公司部分笔试题
2013/11/05 面试题
大学生党性分析材料
2014/12/19 职场文书
开网店计划分析
2019/07/30 职场文书
导游词之大雁塔景区
2019/09/17 职场文书
导游词之南京中山陵
2019/11/27 职场文书