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 数组实例说明
Aug 18 PHP
php 三维饼图的实现代码
Sep 28 PHP
PHP Zip解压 文件在线解压缩的函数代码
May 26 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
php操作SVN版本服务器类代码
Nov 27 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
PHP序列号生成函数和字符串替换函数代码
Jun 07 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
php文件管理基本功能简单操作
Jan 16 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
PHP分享图片的生成方法
Apr 25 PHP
浅谈如何提高PHP代码质量之端到端集成测试
May 28 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&amp;MYSQL分页原理及实现
2007/01/02 PHP
PHP函数常用用法小结
2010/02/08 PHP
php多文件上传功能实现原理及代码
2013/04/18 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
javascript中typeof的使用示例
2013/12/19 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
精通JavaScript的this关键字
2020/05/28 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
javascript实现延时显示提示框特效代码
2016/04/27 Javascript
jQuery侧边栏实现代码
2016/05/06 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
Vue 3.0双向绑定原理的实现方法
2019/10/23 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
python使用matplotlib绘制折线图教程
2017/02/08 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
python实现剪切功能
2019/01/23 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
django序列化时使用外键的真实值操作
2020/07/15 Python
Python如何给函数库增加日志功能
2020/08/04 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
介绍下WebSphere的安全性
2013/01/31 面试题
合作意向协议书范本
2014/03/31 职场文书
Python-typing: 类型标注与支持 Any类型详解
2021/05/10 Python
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技