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 相关文章推荐
一个SQL管理员的web接口
Oct 09 PHP
第十节--抽象方法和抽象类
Nov 16 PHP
探讨php中header的用法详解
Jun 07 PHP
ThinkPHP3.1之D方法实例详解
Jun 20 PHP
php5.4以下版本json不支持不转义内容中文的解决方法
Jan 13 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
php实现从上传文件创建缩略图的方法
Apr 02 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 PHP
PHP概率计算函数汇总
Sep 13 PHP
PHP插件PHPMailer发送邮件功能
Feb 28 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
Apr 09 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 中的str_replace 函数总结
2007/04/27 PHP
php 代码优化的42条建议 推荐
2009/09/25 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
javascript 打开页面window.location和window.open的区别
2010/03/17 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
javascript实用方法总结
2015/02/06 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
Bootstrap Img 图片样式(推荐)
2016/12/13 Javascript
js中的面向对象入门
2017/03/06 Javascript
JavaScript中字符串的常用操作方法及特殊字符
2018/03/18 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
在Python中操作字符串之replace()方法的使用
2015/05/19 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
pycharm重置设置,恢复默认设置的方法
2018/10/22 Python
Python 3.8 新功能全解
2019/07/25 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
小学教师的自我评价范例
2013/10/31 职场文书
省三好学生申请材料
2014/01/22 职场文书
英文留学推荐信范文
2014/01/25 职场文书
房屋买卖协议书
2014/04/10 职场文书
岗位竞聘演讲稿范文
2014/04/24 职场文书
化工专业求职信
2014/07/01 职场文书
重点工程汇报材料
2014/08/27 职场文书
学校开学标语
2014/10/06 职场文书
2015年预算员工作总结
2015/05/14 职场文书
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript