模拟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强制下载类型的实现代码
Apr 21 PHP
php中经典方法实现判断多维数组是否为空
Oct 23 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
Oct 06 PHP
深入php常用函数的使用汇总
Jun 08 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
php中$_GET与$_POST过滤sql注入的方法
Nov 03 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
CI框架数据库查询之join用法分析
May 18 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
PHP进阶学习之依赖注入与Ioc容器详解
Jun 19 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
Aug 24 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
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
yii的CURD操作实例详解
2014/12/04 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
JavaScript入门教程(11) js事件处理
2009/01/31 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
基于Marquee.js插件实现的跑马灯效果示例
2017/01/25 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
JavaScript实现轮播图效果
2020/10/30 Javascript
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
Python中使用wxPython开发的一个简易笔记本程序实例
2015/02/08 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Django choices下拉列表绑定实例
2020/03/13 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
使用 CSS3 中@media 实现网页自适应的示例代码
2020/03/24 HTML / CSS
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
意大利咖啡、浓缩咖啡和浓缩咖啡机:illy caffe
2019/03/20 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
销售人员个人求职信
2013/09/26 职场文书
大学生交通专业求职信
2014/09/01 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
保送生自荐信
2015/03/06 职场文书
银行稽核岗位职责
2015/04/13 职场文书
观后感开头
2015/06/19 职场文书
首次购房证明
2015/06/19 职场文书
优质护理心得体会
2016/01/22 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python