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 define函数的使用说明
Aug 27 PHP
PHP中static关键字原理的学习研究分析
Jul 18 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 PHP
详解WordPress中分类函数wp_list_categories的使用
Jan 04 PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 PHP
php中mkdir()函数的权限问题分析
Sep 24 PHP
PHP面向对象程序设计方法实例详解
Dec 24 PHP
详解Yii2高级版引入bootstrap.js的一个办法
Mar 21 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
在Laravel5中正确设置文件权限的方法
May 22 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 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+mysql一个名片库程序
2006/10/09 PHP
NOT NULL 和NULL
2007/01/15 PHP
如何在php中正确的使用json
2013/08/06 PHP
简单的php文件上传(实例)
2013/10/27 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
PHP简单处理表单输入的特殊字符的方法
2016/02/03 PHP
ThinkPHP实现简单登陆功能
2017/04/28 PHP
js加解密 脚本解密
2008/02/22 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
Jquery 效果使用详解
2015/11/23 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
JavaScript 变量,数据类型基础实例详解【变量、字符串、数组、对象等】
2020/01/04 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
解读Python编程中的命名空间与作用域
2015/10/16 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
Python随机生成带特殊字符的密码
2016/03/02 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
Python内存读写操作示例
2018/07/18 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
文明礼仪演讲稿
2014/05/12 职场文书
工作自我评价范文
2015/03/05 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
Mysql systemctl start mysqld报错的问题解决
2021/06/03 MySQL
js前端图片加载异常兜底方案
2022/06/21 Javascript