模拟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 flush类输出缓冲剖析
Oct 19 PHP
php添加文章时生成静态HTML文章的实现代码
Feb 17 PHP
php递归删除目录下的文件但保留的实例分享
May 10 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
Oct 26 PHP
10个简化PHP开发的工具
Dec 25 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
阿里对象存储OSS在laravel框架中的使用方法
Oct 13 PHP
详解no input file specified 三种解决方法
Nov 29 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中数组首字符过滤功能代码
2012/07/31 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
PHP实现合并discuz用户
2015/08/05 PHP
Dojo 学习要点
2010/09/03 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
不同js异步函数同步的实现方法
2016/05/28 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
HTML5+jQuery实现搜索智能匹配功能
2017/03/24 jQuery
浅谈实现vue2.0响应式的基本思路
2018/02/13 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
Python模拟用户登录验证
2017/09/11 Python
Python3安装Scrapy的方法步骤
2017/11/23 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
python实现超市商品销售管理系统
2019/11/22 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
最新自我评价范文
2013/11/16 职场文书
如何填写个人简历自我评价
2013/12/10 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
校长个人总结
2015/03/03 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS
vue elementUI表格控制对应列
2022/04/13 Vue.js