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 相关文章推荐
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
Feb 22 PHP
一篇不错的PHP基础学习笔记
Mar 18 PHP
php 魔术函数使用说明
Feb 21 PHP
php数组函数序列之array_search()- 按元素值返回键名
Nov 04 PHP
php中异常处理方法小结
Jan 09 PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 PHP
php中使用gd库实现远程图片下载实例
May 12 PHP
php生成图片缩略图功能示例
Feb 22 PHP
laravel-admin select框默认选中的方法
Oct 03 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
Oct 18 PHP
thinkphp框架类库扩展操作示例
Nov 26 PHP
PHP http请求超时问题解决方案
Nov 13 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
php5 and xml示例
2006/11/22 PHP
xajax写的留言本
2006/11/25 PHP
从MySQL数据库表中取出随机数据的代码
2007/09/05 PHP
删除数组元素实用的PHP数组函数
2008/08/18 PHP
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
浅谈Javascript中深复制
2014/12/01 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
详解js前端代码异常监控
2017/01/11 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
python获取图片颜色信息的方法
2015/03/18 Python
python简单线程和协程学习心得(分享)
2017/06/14 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Python并发之多进程的方法实例代码
2018/08/15 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
保护环境演讲稿
2014/05/10 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
工作经历证明书范文
2014/11/02 职场文书
事业单位财务人员岗位职责
2015/04/14 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
ORACLE中dbms_output.put_line输出问题的解决过程
2022/06/28 Oracle