模拟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 相关文章推荐
Windows下安装Memcached的步骤说明
Apr 25 PHP
PHP中常用的转义函数
Feb 28 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 PHP
PHP计算加权平均数的方法
Jul 16 PHP
PHP 开发者该知道的 5 个 Composer 小技巧
Feb 03 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
Oct 29 PHP
ThinkPHP实现简单登陆功能
Apr 28 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
PHP+Redis开发的书签案例实战详解
Jul 09 PHP
Yii框架核心组件类实例详解
Aug 06 PHP
php策略模式简单示例分析【区别于工厂模式】
Sep 25 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中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
js获取当前select 元素值的代码
2010/04/19 Javascript
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
kmock javascript 单元测试代码
2011/02/06 Javascript
jQuery响应鼠标事件并隐藏与显示input默认值
2014/08/24 Javascript
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
javascript 数据存储的常用函数总结
2017/06/01 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
2017/10/26 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
JavaScript语法约定和程序调试原理解析
2020/11/03 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
python根据出生日期返回年龄的方法
2015/03/26 Python
学习python可以干什么
2019/02/26 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
python2和python3哪个使用率高
2020/06/23 Python
Python修改DBF文件指定列
2020/12/19 Python
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
Myprotein比利时官方网站:欧洲第一运动营养品牌
2020/10/04 全球购物
送给程序员的20个Java集合面试问题
2014/08/06 面试题
个人对照检查材料思想汇报
2014/09/26 职场文书
整改落实自查报告
2014/11/05 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python