PHP对文件进行加锁、解锁实例


Posted in PHP onJanuary 23, 2015

有时候你的php脚本或许需要线程安全的保证,比如进行文件写操作的时候。本文提供了文件加锁函数以及使用示例。文件加锁功能也可以用来获得独享的处理空间,防止脚本执行发生同步错误。

<?php

/*************************************************************************

*file lock

*@author Zeal Li

*http://www.zeali.net/

*

*************************************************************************/

/*

*lock_thisfile:获得独享锁

*@param $tmpFileStr 用来作为共享锁文件的文件名(可以随便起一个名字)

*@param $locktype 锁类型,缺省为false(非阻塞型,也就是一旦加锁失败则直接返回false),设置为true则会一直等待加锁成功才返回

*@return 如果加锁成功,则返回锁实例(当使用unlock_thisfile方法的时候需要这个参数),加锁失败则返回false.

*/
function lock_thisfile($tmpFileStr,$locktype=false){
    if($locktype == false)
        $locktype = LOCK_EX|LOCK_NB;
    $can_write = 0;
    $lockfp = @fopen($tmpFileStr.".lock","w");
    if($lockfp){
        $can_write = @flock($lockfp,$locktype);
    }
    if($can_write){
        return $lockfp;
    }
    else{
        if($lockfp){
            @fclose($lockfp);
            @unlink($tmpFileStr.".lock");
        }
        return false;
    }
}
/** 

*unlock_thisfile:对先前取得的锁实例进行解锁

*@param $fp lock_thisfile方法的返回值

*@param $tmpFileStr 用来作为共享锁文件的文件名(可以随便起一个名字)

*/

function unlock_thisfile($fp,$tmpFileStr){
    @flock($fp,LOCK_UN);
    @fclose($fp);
    @fclose($fp);
    @unlink($tmpFileStr.".lock");
}

?>
<?php
// 使用举例

$tmpFileStr = "/tmp/mylock.loc";

// 等待取得操作权限,如果要立即返回则把第二个参数设为false.

$lockhandle = lock_thisfile($tmpFileStr,true);

if($lockhandle){

    // 在这里进行所有需要独占的事务处理。

    // ... ...

    // 事务处理完毕。

    unlock_thisfile($lockhandle,$tmpFileStr);

}

?>

PHP 相关文章推荐
PHP写杨辉三角实例代码
Jul 17 PHP
php对图像的各种处理函数代码小结
Jul 08 PHP
php模拟ping命令(php exec函数的使用方法)
Oct 25 PHP
PHP中foreach()用法汇总
Jul 02 PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 PHP
完美的php分页类
Oct 24 PHP
PHP实现验证码校验功能
Nov 16 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
PHP生成指定范围内的N个不重复的随机数
Mar 18 PHP
php提供实现反射的方法和实例代码
Sep 17 PHP
PHP callback函数使用方法和注意事项
Jan 23 #PHP
PHPExcel内存泄漏问题解决方法
Jan 23 #PHP
使用PHP生成PDF方法详解
Jan 23 #PHP
C# WinForm中实现快捷键自定义设置实例
Jan 23 #PHP
对PHP PDO的一些认识小结
Jan 23 #PHP
smarty模板引擎中自定义函数的方法
Jan 22 #PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 #PHP
You might like
php字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
Symfony生成二维码的方法
2016/02/04 PHP
php格式文件打开的四种方法
2018/02/24 PHP
jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
2011/04/27 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
Vue2路由动画效果的实现代码
2017/07/10 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
python图像处理之镜像实现方法
2015/05/30 Python
python更新列表的方法
2015/07/28 Python
python中的lambda表达式用法详解
2016/06/22 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
python根据文章标题内容自动生成摘要的实例
2019/02/21 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
Python如何实现动态数组
2019/11/02 Python
python numpy数组复制使用实例解析
2020/01/10 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
全球领先美式家具品牌:Ashley爱室丽家居
2017/08/07 全球购物
程序员机试试题汇总
2012/03/07 面试题
新闻工作者先进事迹
2014/05/26 职场文书
立项申请报告范本
2015/05/15 职场文书
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL