模拟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 相关文章推荐
人大复印资料处理程序_输入篇
Oct 09 PHP
PHP时间戳使用实例代码
Jun 07 PHP
str_replace只替换一次字符串的方法
Apr 09 PHP
解析php中session的实现原理以及大网站应用应注意的问题
Jun 17 PHP
php strrpos()与strripos()函数
Aug 31 PHP
php判断正常访问和外部访问的示例
Feb 10 PHP
PHP获取本周第一天和最后一天示例代码
Feb 24 PHP
CI(CodeIgniter)框架中的增删改查操作
Jun 10 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
php实现微信公众号创建自定义菜单功能的实例代码
Jun 11 PHP
详解Laravel服务容器的绑定与解析
Nov 05 PHP
一次项目中Thinkphp绕过禁用函数的实战记录
Nov 17 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仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
Node.js学习入门
2017/01/03 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
js实现导航跟随效果
2018/11/17 Javascript
基于JavaScript 实现拖放功能
2019/09/12 Javascript
QML实现圆环颜色选择器
2019/09/25 Javascript
vue-dplayer 视频播放器实例代码
2019/11/08 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python中的高级数据结构详解
2015/03/27 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
python实现报表自动化详解
2017/11/16 Python
Python实现朴素贝叶斯分类器的方法详解
2018/07/04 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
Java程序员面试90题
2013/10/19 面试题
革命先烈的英雄事迹材料
2014/02/15 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
二手车转让协议书
2015/01/29 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
Oracle使用别名的好处
2022/04/19 Oracle
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python