模拟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为什么选mysql作为数据库? Mysql 创建用户方法
Jul 02 PHP
IStream与TStream之间的相互转换
Aug 01 PHP
php二分法在IP地址查询中的应用
Aug 12 PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 PHP
PHP 循环列出目录内容的函数代码
May 26 PHP
PHP 代码规范小结
Mar 08 PHP
PHP生成自适应大小的缩略图类及使用方法分享
May 06 PHP
thinkphp3.x中变量的获取和过滤方法详解
May 20 PHP
PHP中error_reporting函数用法详细介绍
Jun 11 PHP
作为PHP程序员你要知道的另外一种日志
Jul 30 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 PHP
php简单检测404页面的方法示例
Aug 23 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变量修饰符static的使用
2013/06/28 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
codeigniter显示所有脚本执行时间的方法
2015/03/21 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
JavaScript程序员应该知道的45个实用技巧
2014/03/04 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
javascript实现在指定元素中垂直水平居中
2015/09/13 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
深入理解Vue 的条件渲染和列表渲染
2017/09/01 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
[45:56]Ti4正赛第一天 VG vs NEWBEE 3
2014/07/19 DOTA
教你学会使用Python正则表达式
2017/09/07 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
使用Python为中秋节绘制一块美味的月饼
2019/09/11 Python
python3 xpath和requests应用详解
2020/03/06 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
会计出纳岗位职责
2013/12/25 职场文书
求职信的七个关键技巧
2014/02/05 职场文书
采购求职信
2014/03/17 职场文书
求职信模板
2014/05/23 职场文书
国际贸易毕业生自荐书
2014/06/22 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫