模拟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动态生成静态HTML网页的代码
Mar 04 PHP
fleaphp crud操作之find函数的使用方法
Apr 23 PHP
php实现监听事件
Nov 06 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
PHP基于CURL进行POST数据上传实例
Nov 10 PHP
php读取csc文件并输出
May 21 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
php生成图片缩略图功能示例
Feb 22 PHP
THINKPHP在添加数据的时候获取主键id的值方法
Apr 03 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 PHP
tp5.1 框架join方法用法实例分析
May 26 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
haskell实现多线程服务器实例代码
2013/11/26 Python
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
2019/06/14 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
大专学生推荐信范文
2013/11/19 职场文书
校三好学生主要事迹
2014/01/11 职场文书
清明节演讲稿
2014/05/27 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
元宵节寄语大全
2015/02/27 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS