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 相关文章推荐
计算2000年01月01日起到指定日的天数
Oct 09 PHP
PHP 金额数字转换成英文
May 06 PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 PHP
Linux编译升级php的详细方法
Nov 04 PHP
对PHP PDO的一些认识小结
Jan 23 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
Mar 21 PHP
PHP打印输出函数汇总
Aug 28 PHP
thinkPHP分页功能实例详解
May 05 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
PHP+JS实现的实时搜索提示功能
Mar 13 PHP
php-fpm重启导致的程序执行中断问题详解
Apr 29 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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
php巧获服务器端信息
2006/12/06 PHP
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
2017/11/21 PHP
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
基于jquery的关于动态创建DOM元素的问题
2010/12/24 Javascript
js实现翻页后保持checkbox选中状态的实现方法
2012/11/03 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
JS使用parseInt解析数字实现求和的方法
2015/08/05 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
[49:05]Newbee vs TNC 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python爬取国外天气预报网站的方法
2015/07/10 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
什么是测试驱动开发(TDD)
2012/02/15 面试题
北大研究生linux应用求职信
2013/10/29 职场文书
追悼会主持词
2014/03/20 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
普通党员整改措施
2014/10/24 职场文书
2014年超市员工工作总结
2014/11/18 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
三八节活动简报
2015/07/20 职场文书
小学英语教学反思范文
2016/02/15 职场文书
Python基础详解之邮件处理
2021/04/28 Python
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android
浅谈Redis的事件驱动模型
2022/05/30 Redis