模拟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下删除一篇文章生成的多个静态页面
Aug 08 PHP
Linux环境下搭建php开发环境的操作步骤
Jun 17 PHP
php selectradio和checkbox默认选择的实现方法详解
Jun 29 PHP
PHP登录环节防止sql注入的方法浅析
Jun 30 PHP
destoon调用discuz论坛中带图片帖子的实现方法
Aug 21 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
Nov 19 PHP
PHP开发注意事项总结
Feb 04 PHP
php一个解析字符串排列数组的方法
May 12 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
Jul 28 PHP
CI框架使用composer安装的依赖包步骤与方法分析
Nov 21 PHP
php实现session共享的实例方法
Sep 19 PHP
php的lavarel框架中join和orWhere的用法
Dec 28 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生成静态HTML速度快类库
2007/03/18 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2014/07/02 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
php表单提交实例讲解
2015/11/12 PHP
CI框架出现mysql数据库连接资源无法释放的解决方法
2016/05/17 PHP
用JS写的一个TableView控件代码
2010/01/23 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
2016/07/22 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2014/06/10 Python
python中threading超线程用法实例分析
2015/05/16 Python
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
不可错过的十本Python好书
2017/07/06 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
用Python分析3天破10亿的《我不是药神》到底神在哪?
2018/07/12 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
多个python文件调用logging模块报错误
2020/02/12 Python
Python requests及aiohttp速度对比代码实例
2020/07/16 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
上海天奕面试题笔试题
2015/04/19 面试题
公司活动方案范文
2014/03/06 职场文书
设备管理实施方案
2014/05/31 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
创业计划书之干洗店
2019/09/10 职场文书
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android