模拟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与XML的PDF文档生成技术
Oct 09 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 PHP
PHP在线生成二维码(google api)的实现代码详解
Jun 04 PHP
使用PHP获取当前url路径的函数以及服务器变量
Jun 29 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
php+mysqli使用预处理技术进行数据库查询的方法
Jan 28 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
Feb 02 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
Mar 13 PHP
简单的php+mysql聊天室实现方法(附源码)
Jan 05 PHP
php强大的时间转换函数strtotime
Feb 18 PHP
PHP常见的几种攻击方式实例小结
Apr 29 PHP
php操作redis命令及代码实例大全
Nov 19 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 set_error_handler()函数使用详解(示例)
2013/11/12 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
nodeJS代码实现计算交社保是否合适
2015/03/09 NodeJs
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
JavaScript+html5 canvas实现本地截图教程
2020/04/16 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
微信小程序自定义音乐进度条的实例代码
2018/08/28 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
python中MySQLdb模块用法实例
2014/11/10 Python
python的多重继承的理解
2017/08/06 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
2019/06/17 Python
react+django清除浏览器缓存的几种方法小结
2019/07/17 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
Python 使用多属性来进行排序
2019/09/01 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
python 错误处理 assert详解
2020/04/20 Python
一款基于css3的列表toggle特效实例教程
2015/01/04 HTML / CSS
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
医学生自荐信
2013/12/03 职场文书
自动化专业个人求职信范文
2013/12/30 职场文书
医院实习介绍信
2014/01/12 职场文书
《称象》教学反思
2014/04/25 职场文书
2015年远程教育工作总结
2015/05/20 职场文书