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在Web开发领域的优势
Oct 09 PHP
在 PHP 中使用随机数的三个步骤
Oct 09 PHP
php强制下载类型的实现代码
Apr 21 PHP
Sorting Array Values in PHP(数组排序)
Sep 15 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
php下载文件源代码(强制任意文件格式下载)
May 09 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
Oct 30 PHP
php中session定期自动清理的方法
Nov 12 PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
Nov 05 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中iconv函数使用方法
2008/05/24 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
PHP按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
调试PHP程序的多种方法介绍
2014/11/06 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
BootStrap实现带关闭按钮功能
2017/02/15 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
vue 父组件通过$refs获取子组件的值和方法详解
2019/11/07 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
Django自定义manage命令实例代码
2018/02/11 Python
pygame游戏之旅 如何制作游戏障碍
2018/11/20 Python
flask应用部署到服务器的方法
2019/07/12 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
Python continue语句实例用法
2020/02/06 Python
Python装饰器用法与知识点小结
2020/03/09 Python
Pycharm安装python库的方法
2020/11/24 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
Giglio德国网上精品店:奢侈品服装和配件
2016/09/23 全球购物
小学数学教学反思
2014/02/02 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
检讨书1000字
2014/10/11 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL
CSS基础详解
2021/10/16 HTML / CSS