模拟flock实现文件锁定

yipeiwu_com5年前PHP代码库
主要提供了一种思路。
  $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+Ajax无刷新验证用户名操作实例详解

php+Ajax无刷新验证用户名操作实例详解

本文实例讲述了php+Ajax无刷新验证用户名操作。分享给大家供大家参考,具体如下: AJAX 简介 AJAX = Asynchronous JavaScript And XML(异步...

php与paypal整合方法

我晕,最近这个用paypal付款的功能搞了我2天,还没搞完。郁闷死了。 先做个笔记,把已经搞定的部分写下来,省的以后忘了。 1 注册SandBox账号,并且建立两个虚拟账号,可以选择自动...

PHP实现数组递归转义的方法

本文以实例形式讲述了PHP实现数组递归转义的方法,分享给大家供大家参考之用。具体方法如下: 主要功能代码如下: $arr = array('a"aa',array("c'd",arr...

PHP实现的简易版图片相似度比较

由于相似图片搜索的php实现的 API 不怎么符合我的用途,所以我重新定义 API 的架构,改写成比较简单的函数方式,虽然还是用对象的方式包装。 复制代码 代码如下: <?...

php导出CSV抽象类实例

本文实例讲述了php导出CSV抽象类及其应用,分享给大家供大家参考。具体分析如下: 该php导出CSV抽象类,可根据总记录数与每批次记录数,计算总批次,循环导出。避免内存不足的问题。 E...