模拟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.ini中文版(2)
Oct 09 PHP
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
PHP 截取字符串 分别适合GB2312和UTF8编码情况
Feb 12 PHP
php 数组的指针操作实现代码
Feb 08 PHP
学习使用curl采集curl使用方法
Jan 11 PHP
yii上传文件或图片实例
Apr 01 PHP
PHP性能分析工具XHProf安装使用教程
May 13 PHP
PHP中JSON的应用技巧
Oct 10 PHP
Thinkphp批量更新数据的方法汇总
Jun 29 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
PHP+ajax实现获取新闻数据简单示例
May 08 PHP
php微信开发之图片回复功能
Jun 14 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 需要掌握的东西 不做浮躁的人
2009/12/28 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
php中array_multisort对多维数组排序的方法
2020/06/21 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
2020/12/24 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
jQuery实现简单的下拉菜单导航功能示例
2017/12/07 jQuery
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
小程序实现抽奖动画
2020/04/16 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
python 计算文件的md5值实例
2017/01/13 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
2019/05/29 Python
PyQt5显示GIF图片的方法
2019/06/17 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
PyInstaller的安装和使用的详细步骤
2020/06/02 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
Python collections模块的使用方法
2020/10/09 Python
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
面试后的英文感谢信
2014/02/01 职场文书
《小池塘》教学反思
2014/02/28 职场文书
四风问题查摆材料
2014/08/25 职场文书
2015年防灾减灾工作总结
2015/07/24 职场文书
初三毕业感言
2015/07/31 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫