模拟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最常用的ini函数分析 针对PHP.ini配置文件
Apr 22 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
Jun 03 PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
php计算多维数组中所有值总和的方法
Jun 24 PHP
4种PHP异步执行的常用方式
Dec 24 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
May 05 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
May 06 PHP
PHP7 其他语言层面的修改
Mar 09 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
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
php集成开发环境详解
2019/09/24 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
2020/11/10 PHP
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
AngularJS中ng-options实现下拉列表的数据绑定方法
2018/08/13 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
Python发送Email方法实例
2014/08/21 Python
Python常用库推荐
2016/12/04 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
python的range和linspace使用详解
2019/11/27 Python
Python用5行代码实现批量抠图的示例代码
2020/04/14 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
2020/06/08 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
关于Java String的一道面试题
2013/09/29 面试题
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
5个HTML5的常用本地存储方式详解与介绍
2021/03/27 HTML / CSS
安全生产实施方案
2014/02/23 职场文书
工作评语大全
2014/04/26 职场文书
护校行动方案
2014/05/31 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
2016年教师节慰问信
2015/12/01 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书
JAVA API 实用类 String详解
2021/10/05 Java/Android
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA
Spring Security使用单点登录的权限功能
2022/04/03 Java/Android