模拟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读取RSS feed的代码
Aug 01 PHP
PHP+MySQL 手工注入语句大全 推荐
Oct 30 PHP
超级简单的php+mysql留言本源码
Nov 11 PHP
完美解决:Apache启动问题―(OS 10022)提供了一个无效的参数
Jun 08 PHP
Drupal读取Excel并导入数据库实例
Mar 02 PHP
Codeigniter操作数据库表的优化写法总结
Jun 12 PHP
PHP使用CURL实现多线程抓取网页
Apr 30 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
PHP编写登录验证码功能 附调用方法
May 19 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 PHP
详解PHP素材图片上传、下载功能
Apr 12 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
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
PHP计算百度地图两个GPS坐标之间距离的方法
2015/01/09 PHP
详解PHP安装mysql.so扩展的方法
2016/12/31 PHP
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
js中定义一个变量并判断其是否为空的方法
2014/05/13 Javascript
Javascript 数组排序详解
2014/10/22 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
JS组件Bootstrap Table表格多行拖拽效果实现代码
2015/12/08 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
JS中的三个循环小结
2017/06/20 Javascript
详解JS模块导入导出
2017/12/20 Javascript
新手如何快速理解js异步编程
2019/06/24 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
Python字符串转换成浮点数函数分享
2015/07/24 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
Marlies Dekkers内衣法国官方网上商店:国际知名的荷兰内衣品牌
2019/03/18 全球购物
马云北大演讲完整版:真心话,什么才是阿里的核心竞争力?
2014/04/04 职场文书
学习保证书范文
2014/04/30 职场文书
单位工作证明范文
2014/09/14 职场文书
甲乙双方合作协议书
2014/10/13 职场文书
先进班集体申报材料
2014/12/26 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书
详解Django的MVT设计模式
2021/04/29 Python
Redis IP地址的绑定的实现
2021/05/08 Redis
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android
python manim实现排序算法动画示例
2022/08/14 Python