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 相关文章推荐
一个程序下载的管理程序(二)
Oct 09 PHP
php判断输入不超过mysql的varchar字段的长度范围
Jun 24 PHP
关于PHP中Object对象的笔记分享
Jun 28 PHP
phpmyadmin3 安装配置图解教程
Mar 29 PHP
解析wamp5下虚拟机配置文档
Jun 27 PHP
php使用array_search函数实现数组查找的方法
Jun 12 PHP
PHP中filter函数校验数据的方法详解
Jul 31 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
php的debug相关函数用法示例
Jul 11 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
PHP标准库(PHP SPL)详解
Mar 16 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
解决phpmyadmin中文乱码问题。。。
2007/01/18 PHP
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
HTML颜色选择器实现代码
2010/11/23 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
2012/06/20 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
Javascript读取上传文件内容/类型/字节数
2019/04/30 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
Python psutil模块简单使用实例
2015/04/28 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
基于python socketserver框架全面解析
2017/09/21 Python
速记Python布尔值
2017/11/09 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
Python3匿名函数用法示例
2018/07/25 Python
python 定时器,实现每天凌晨3点执行的方法
2019/02/20 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
解决keras加入lambda层时shape的问题
2020/06/11 Python
大学生个人简历中的自我评价
2013/12/27 职场文书
大学毕业感言50字
2014/02/07 职场文书
演讲主持词
2014/03/18 职场文书
结婚纪念日感言
2015/08/01 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
Redis 哨兵集群的实现
2021/06/18 Redis
Golang流模式之grpc的四种数据流
2022/04/13 Golang