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 和 MYSQL
Oct 09 PHP
基于HTTP长连接的&quot;服务器推&quot;技术的php 简易聊天室
Oct 31 PHP
ThinkPHP登录功能的实现方法
Aug 20 PHP
PHP+JS实现大规模数据提交的方法
Jul 02 PHP
为你总结一些php系统类函数
Oct 21 PHP
PHP 中提示undefined index如何解决(多种方法)
Mar 16 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
多个Laravel项目如何共用migrations详解
Sep 25 PHP
PHP一个简单的无需刷新爬虫
Jan 05 PHP
PHP实现简单日历类编写
Aug 28 PHP
基于PHP实现用户在线状态检测
Nov 10 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字符串截取函数用法分析
2014/11/25 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
js实现字符串和数组之间相互转换操作
2016/01/12 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
JS中递归函数
2016/06/17 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
JavaScript 中 apply 、call 的详解
2017/03/21 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
详解Python异常处理中的Finally else的功能
2017/12/29 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
tensorflow之变量初始化(tf.Variable)使用详解
2020/02/06 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
python可迭代对象去重实例
2020/05/15 Python
基于Python测试程序是否有错误
2020/05/16 Python
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
士力架广告词
2014/03/20 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
辅导员评语
2014/05/04 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
领导干部对照检查材料
2014/08/24 职场文书
党建工作整改措施
2014/10/28 职场文书
Golang生成Excel文档的方法步骤
2021/06/09 Golang
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android